2008-11-20 6 views
92

आदि का उपयोग डंप मैं SQLite के इंटरैक्टिव खोल आदेशों के समकक्ष लाने के लिए एक तरह से नहीं मिल सकता है:तालिकाओं की सूची, डाटाबेस स्कीमा, किसी कारण से अजगर sqlite3 एपीआई

.tables 
.dump 

अजगर sqlite3 एपीआई का उपयोग कर।

क्या ऐसा कुछ भी है?

+1

मैं सुझाव देता हूं कि प्रश्न को गैर पायथन विशिष्ट में कुछ नाम दें क्योंकि उत्तर वास्तव में एसक्यूएल का उपयोग करने वाले इंटरफेस के लिए सार्वभौमिक है। – Unode

+2

सच है, हालांकि मैं इसे पूछते समय एक अजगर एपीआई की उम्मीद कर रहा था। मैं सही नाम खोजने की कोशिश करूंगा। – noamtm

+3

यदि sqlite3 कमांड प्रॉम्प्ट से टेबल दिखाना चाहते हैं, तो http://stackoverflow.com/questions/82875/how-do-i-list-the-tables-in-a-sqlite-database-file देखें। यदि पाइथन पैकेज sqlite3 का उपयोग करते हैं, तो यहां दाऊद टैगहावी-नेजाद का जवाब देखें।मेरा सुझाव है कि ओपी पाइथन को प्रश्न शीर्षक में वापस जोड़ दें और दाऊद के जवाब का चयन करें। मुझे यह पृष्ठ "शो टेबल पायथन एसक्लाइट 3" गुगल करके मिला है क्योंकि Google पुराने प्रश्न शीर्षक को जानता है। एसओ के भीतर खोजें यहां भूमि में असफल हो जाएंगी। पायथन कोण के बिना, जुड़े डुप्लिकेट प्रश्न 82875 को और भीड़ ज्ञान प्राप्त हुआ है। –

उत्तर

71

उपयोग कर सकते हैं आप 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 
) 
17

मैं अजगर एपीआई से परिचित नहीं हूँ लेकिन आप हमेशा

SELECT * FROM sqlite_master; 
2

बाहर चेक here डंप के लिए ऐसा लगता है कि पुस्तकालय sqlite3 में एक डंप समारोह है। 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) 
+0

मैं कोशिश कर रहा हूँ: आयात sqlite3 चोर = sqlite3.connect ("test.db") con.dump() यह विफल रहता है ... मैं – Angel

17

जाहिर अजगर 2.6 में शामिल sqlite3 के संस्करण इस क्षमता है। पांडा का उपयोग करके एक बहुत तेज़ तरीका है।

+1

जाँच रखना इस के साथ सावधान रहें, यह प्रिंट होगा सब आपके टेबल में डेटा अगर वे INSERT में बयान के साथ आबादी वाले हैं! – RobinL

148

अजगर में:

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

मेरे अन्य answer से सावधान रहें

1

बहुत सारे झुकाव के बाद मुझे टेबल के लिए मेटाडेटा सूचीबद्ध करने के लिए sqlite docs पर एक बेहतर उत्तर मिला, यहां तक ​​कि संलग्न डेटाबेस भी।

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

मुख्य जानकारी table_info उपसर्ग करना है, संलग्नक हैंडल नाम के साथ my_table नहीं।

+0

मुझे आपके द्वारा लिखे गए स्निपेट में बहुत सारी त्रुटियां मिलीं, और उदाहरण नहीं दिखतीं। या तो संदर्भित दस्तावेज़ों में या अन्य उदाहरणों में "db_alias"। अन्य उदाहरणों के संदर्भ में, मुझे लगता है कि आप इस लाइन को चाहते हैं, उदाहरण के लिए 'जॉब' तालिका: 'मेटा = कर्सर.एक्सक्यूट (" PRAGMA table_info ('job') ") 'और आपकी पहली पंक्ति बाकी से असंबंधित प्रतीत होती है। – nealmcb

0

मैं PHP में एक SQLite तालिका स्कीमा पार्सर को क्रियान्वित किया है, तो आप यहाँ जाँच कर सकते हैं:

$parser = new SqliteTableDefinitionParser; 
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)'); 
32

सबसे तेज़: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php

आप इस परिभाषा पार्सर नीचे कोड की तरह परिभाषाओं पार्स करने के लिए उपयोग कर सकते हैं पायथन में ऐसा करने का तरीका पांडस (संस्करण 0.16 और ऊपर) का उपयोग कर रहा है।

एक तालिका डंप:

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') 
1
#!/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" 
1

यहाँ बाहर तालिका के नाम और उन तालिकाओं के लिए स्तंभ नाम मुद्रित करने के लिए एक संक्षिप्त और सरल अजगर कार्यक्रम है।

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." 
संबंधित मुद्दे