किसी कारण से मुझे sqlite के इंटरेक्टिव शेल कमांड के समकक्ष प्राप्त करने का कोई तरीका नहीं मिल सकता है:
.tables
.dump
पायथन sqlite3 एपीआई का उपयोग कर।
क्या ऐसा कुछ है?
किसी कारण से मुझे sqlite के इंटरेक्टिव शेल कमांड के समकक्ष प्राप्त करने का कोई तरीका नहीं मिल सकता है:
.tables
.dump
पायथन sqlite3 एपीआई का उपयोग कर।
क्या ऐसा कुछ है?
जवाबों:
आप 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
)
sqlite> .schema job
अजगर में अवैध वाक्य रचना ... मैं क्या याद कर रहा हूँ?
sqlite>
sqlite कमांड लाइन क्लाइंट प्रॉम्प्ट है। उदाहरण का उद्देश्य यह प्रदर्शित करना था कि टेबल और स्कीमा को सूचीबद्ध करने के लिए डेटाबेस कैसे क्वेरी कर सकता है।
पायथन में:
con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
print(cursor.fetchall())
मेरे अन्य उत्तर के लिए बाहर देखो । पांडा का उपयोग करने का एक बहुत तेज़ तरीका है।
cursor.close()
औरdb.close()
अजगर में ऐसा करने का सबसे तेज़ तरीका पंडों (संस्करण 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')
cursor.close()
db.close()
cursor.close()
और db.close()
।
with sqlite3.connect('database.db') as db:
यहां तालिका के नाम और उन तालिकाओं के स्तंभ नाम (अजगर 2. अजगर 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."
(EDIT: मुझे इस पर समय-समय पर वोट मिलते रहे हैं, इसलिए यहां उन लोगों के लिए python3 संस्करण है जो इस उत्तर को पा रहे हैं)
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.")
जाहिर तौर पर Python 2.6 में शामिल 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)
बहुत सी फ़िदालिंग के बाद, मुझे टेबल के लिए मेटाडेटा सूचीबद्ध करने के लिए भी साइक्लाइट डाइक्सेस में बेहतर उत्तर मिला , यहाँ तक कि संलग्न डेटाबेस भी।
meta = cursor.execute("PRAGMA table_info('Job')")
for r in meta:
print r
मुख्य जानकारी अनुलग्नक हैंडल नाम के साथ my_table नहीं, table_info उपसर्ग है।
Job
तालिका: meta = cursor.execute("PRAGMA table_info('Job')")
और आपकी पहली पंक्ति बाकी के लिए असंबंधित है।
अगर कोई पंडों के साथ ऐसा ही करना चाहता है
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)
#!/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"
मैंने PHP में एक sqlite टेबल स्कीमा पार्सर लागू किया है, आप यहां देख सकते हैं: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SlliteTableDefinitionParser.php
आप इस परिभाषा पार्सर का उपयोग नीचे दिए गए कोड जैसी परिभाषाओं को पार्स करने के लिए कर सकते हैं:
$parser = new SqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');