পাইথন স্ক্লাইট 3 এপিআই ব্যবহার করে সারণী, ডিবি স্কিমা, ডাম্প ইত্যাদির তালিকা


151

কোনও কারণে আমি স্ক্লাইটের ইন্টারেক্টিভ শেল কমান্ডের সমপরিমাণ পাওয়ার উপায় খুঁজে পাচ্ছি না:

.tables
.dump

পাইথন স্ক্লাইট 3 এপিআই ব্যবহার করে।

এরকম কিছু আছে কি?


1
আমি প্রশ্নটির নাম অজগর নির্দিষ্ট কিছু পরিবর্তন করার পরামর্শ দিচ্ছি কারণ উত্তরটি আসলে এসকিউএল ব্যবহার করা ইন্টারফেসগুলির সর্বজনীন।
আনোড করুন

2
সত্য, যদিও আমি এটি জিজ্ঞাসা করার সময় পাইথন এপিআইয়ের প্রত্যাশা করছিলাম। আমি সঠিক নামটি খুঁজতে চেষ্টা করব।
noamtm

3
তাহলে প্রম্পট sqlite3 হুকুম থেকে টেবিল দেখানোর জন্য অনুপস্থিত, পড়ুন stackoverflow.com/questions/82875/... । পাইথন প্যাকেজ স্ক্লাইট 3 ব্যবহার করা হলে দাউদ তাগাওহী-নেজাদের উত্তর এখানে দেখুন। আমি পরামর্শ দিচ্ছি যে ওপি পাইথনকে আবার প্রশ্নের শিরোনামে যুক্ত করে দাওউদের উত্তর নির্বাচন করবে। গুগল পুরানো প্রশ্নের শিরোনাম জানেন বলে গুগল করে "পাইথন স্ক্লাইট 3 দেখানোর টেবিলগুলি" পেয়ে আমি এই পৃষ্ঠাটি পেয়েছি। এসও এর মধ্যে অনুসন্ধানগুলি এখানে অবতরণ করতে ব্যর্থ হবে। পাইথন কোণ ব্যতীত, লিঙ্কযুক্ত সদৃশ প্রশ্ন 82875 এর চেয়েও বেশি ভিড়ের বুদ্ধি পেয়েছে।
বেনেট ব্রাউন 17

উত্তর:


106

আপনি SQLITE_MASTER টেবিলটি জিজ্ঞাসা করে টেবিলগুলি এবং স্কিমেটার তালিকাটি আনতে পারেন:

sqlite> .tab
job         snmptarget  t1          t2          t3        
sqlite> select name from sqlite_master where type = 'table';
job
t1
t2
snmptarget
t3

sqlite> .schema job
CREATE TABLE job (
    id INTEGER PRIMARY KEY,
    data VARCHAR
);
sqlite> select sql from sqlite_master where type = 'table' and name = 'job';
CREATE TABLE job (
    id INTEGER PRIMARY KEY,
    data VARCHAR
)

2
sqlite> .schema jobপাইথনে অবৈধ বাক্য গঠন ... আমি কী অনুপস্থিত?
jbuddy_13


1
@ jbuddy_13 sqlite>হল স্ক্লাইট কমান্ড লাইন ক্লায়েন্ট প্রম্পট। উদাহরণটির উদ্দেশ্যটি প্রদর্শন করা ছিল যে কীভাবে টেবিলগুলি এবং স্কিমা তালিকাভুক্ত করতে ডাটাবেসকে প্রশ্ন করা যায় could
রূপান্তরকারী 42

245

পাইথনে:

con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
print(cursor.fetchall())

আমার অন্য উত্তর জন্য সন্ধান করুন । পান্ডাস ব্যবহার করার অনেক দ্রুত উপায় রয়েছে।


13
ব্যবহারকারীরা অনুলিপি / পেস্ট করতে আসছেন: তা নিশ্চিত করুন cursor.close()এবংdb.close()
টি.ওউডি

1
এটি সঠিক উত্তর বলে মনে হচ্ছে তবুও অপর আরেকটি অনুমোদিত করেছে ...
a_a_a

3
@ এ_এ_এ উম্মে ৪ বছরের পার্থক্য?
মুনক্র্যাটার

72

পাইথনে এটি করার সবচেয়ে দ্রুততম উপায়টি পান্ডাস ব্যবহার করছে (সংস্করণ ০.০ up এবং তার বেশি)।

একটি টেবিল ডাম্প:

db = sqlite3.connect('database.db')
table = pd.read_sql_query("SELECT * from table_name", db)
table.to_csv(table_name + '.csv', index_label='index')

সমস্ত সারণী ডাম্প করুন:

import sqlite3
import pandas as pd


def to_csv():
    db = sqlite3.connect('database.db')
    cursor = db.cursor()
    cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
    tables = cursor.fetchall()
    for table_name in tables:
        table_name = table_name[0]
        table = pd.read_sql_query("SELECT * from %s" % table_name, db)
        table.to_csv(table_name + '.csv', index_label='index')
    cursor.close()
    db.close()

3
ব্যবহারকারীরা অনুলিপি / পেস্ট করতে আসেন: cursor.close()এবং নিশ্চিত হন db.close()
টি.ওউডি

2
বা ভাল ব্যবহারwith sqlite3.connect('database.db') as db:
Frans

23

আমি পাইথন এপিআইয়ের সাথে পরিচিত নই তবে আপনি সর্বদা ব্যবহার করতে পারেন

SELECT * FROM sqlite_master;

20

এই টেবিলগুলির টেবিলের নাম এবং কলামের নামগুলি মুদ্রণের জন্য এখানে একটি ছোট এবং সাধারণ অজগর প্রোগ্রামটি রয়েছে (পাইথন ২ টি অজগরটি 3 টি অনুসরণ করে)।

import sqlite3

db_filename = 'database.sqlite'
newline_indent = '\n   '

db=sqlite3.connect(db_filename)
db.text_factory = str
cur = db.cursor()

result = cur.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall()
table_names = sorted(zip(*result)[0])
print "\ntables are:"+newline_indent+newline_indent.join(table_names)

for table_name in table_names:
    result = cur.execute("PRAGMA table_info('%s')" % table_name).fetchall()
    column_names = zip(*result)[1]
    print ("\ncolumn names for %s:" % table_name)+newline_indent+(newline_indent.join(column_names))

db.close()
print "\nexiting."

(সম্পাদনা: আমি এটির উপর পর্যায়ক্রমে ভোট আপ পাচ্ছি, সুতরাং এই উত্তরটি খুঁজে পাওয়া লোকদের জন্য পাইথন 3 সংস্করণ এখানে দেওয়া হয়েছে)

import sqlite3

db_filename = 'database.sqlite'
newline_indent = '\n   '

db=sqlite3.connect(db_filename)
db.text_factory = str
cur = db.cursor()

result = cur.execute("SELECT name FROM sqlite_master WHERE type='table';").fetchall()
table_names = sorted(list(zip(*result))[0])
print ("\ntables are:"+newline_indent+newline_indent.join(table_names))

for table_name in table_names:
    result = cur.execute("PRAGMA table_info('%s')" % table_name).fetchall()
    column_names = list(zip(*result))[1]
    print (("\ncolumn names for %s:" % table_name)
           +newline_indent
           +(newline_indent.join(column_names)))

db.close()
print ("\nexiting.")

17

স্পষ্টতই পাইথন ২.6-এ অন্তর্ভুক্ত স্ক্লাইটাইট ৩ এর সংস্করণটির এই ক্ষমতা রয়েছে: http://docs.python.org/dev/library/sqlite3.html

# Convert file existing_db.db to SQL dump file dump.sql
import sqlite3, os

con = sqlite3.connect('existing_db.db')
with open('dump.sql', 'w') as f:
    for line in con.iterdump():
        f.write('%s\n' % line)

1
এটি সম্পর্কে সতর্কতা অবলম্বন করুন, এটি আপনার টেবিলের সমস্ত ডেটা মুদ্রণ করবে যদি সেগুলি INSERT INTO বিবৃতিতে জনবসতিযুক্ত হয়!
রবিনএল

4

প্রচুর পরিশ্রমের পরে আমি টেবিলের জন্য মেটাডেটা তালিকাভুক্ত এমনকি সংযুক্ত ডাটাবেসগুলির জন্য স্ক্লাইট ডক্সে আরও ভাল উত্তর পেয়েছি ।

meta = cursor.execute("PRAGMA table_info('Job')")
for r in meta:
    print r

মূল তথ্যটি হল টেবিল-ইনফোর উপসর্গ করা, সংযুক্তি হ্যান্ডেল নামটি সহ আমার_সাধ্যটি নয়।


আপনার লেখা স্নিপেটে আমি প্রচুর ত্রুটি পেয়েছি এবং উল্লেখযোগ্য ডক্স বা অন্য উদাহরণগুলিতে উদাহরণস্বরূপ "db_alias" দেখতে পাচ্ছি না। অন্যান্য উদাহরণগুলির প্রসঙ্গে, আমি মনে করি আপনি এই লাইনটি চান, উদাহরণস্বরূপ Jobটেবিল: meta = cursor.execute("PRAGMA table_info('Job')") এবং আপনার প্রথম লাইনটি বাকী সাথে সম্পর্কিত নয় বলে মনে হচ্ছে।
নীলাম্যাকবি

4

কেউ যদি পান্ডাদের সাথে একই কাজ করতে চান

import pandas as pd
import sqlite3
conn = sqlite3.connect("db.sqlite3")
table = pd.read_sql_query("SELECT name FROM sqlite_master WHERE type='table'", conn)
print(table)

1
জুপিটার নোটবুক এবং
পান্ডাদের

এরকম দরকারী উত্তর স্ল্যাম করার দরকার নেই। যদিও, যথারীতি, একটি প্রসঙ্গ পরিচালককে সুপারিশ করা হয়।
ব্যবহারকারী 66081

আমি এটি সবচেয়ে পরিষ্কার এবং সবচেয়ে দরকারী উত্তর বলে মনে করি।
এনএল

2

ডাম্প জন্য এখানে দেখুন । দেখে মনে হচ্ছে লাইব্রেরিতে স্কামাইট 3 এ একটি ডাম্প ফাংশন রয়েছে।


আমি চেষ্টা করছি: sqlite3 con = sqlite3.connect ("test.db") con.dump () এটি ব্যর্থ হয় ... আমি পরীক্ষা চালিয়ে যাচ্ছি
অ্যাঞ্জেল

2
#!/usr/bin/env python
# -*- coding: utf-8 -*-

if __name__ == "__main__":

   import sqlite3

   dbname = './db/database.db'
   try:
      print "INITILIZATION..."
      con = sqlite3.connect(dbname)
      cursor = con.cursor()
      cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
      tables = cursor.fetchall()
      for tbl in tables:
         print "\n########  "+tbl[0]+"  ########"
         cursor.execute("SELECT * FROM "+tbl[0]+";")
         rows = cursor.fetchall()
         for row in rows:
            print row
      print(cursor.fetchall())
   except KeyboardInterrupt:
      print "\nClean Exit By user"
   finally:
      print "\nFinally"

0

আমি পিএইচপি-তে একটি স্ক্লাইট টেবিল স্কিমা পার্সার প্রয়োগ করেছি, আপনি এখানে পরীক্ষা করতে পারেন: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php

আপনি নীচের কোডের মতো সংজ্ঞাগুলি পার্স করতে এই সংজ্ঞা পার্সার ব্যবহার করতে পারেন:

$parser = new SqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.