পাইথন স্ক্লাইট 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.