Je suggère de renommer la question en quelque chose de non spécifique à Python, car la réponse est en fait universelle pour les interfaces qui utilisent SQL.
unode
2
C'est vrai, même si je m'attendais à une API python en le posant. J'essaierai de trouver le bon nom.
noamtm
3
Si vous souhaitez afficher des tables à partir de l'invite de commande sqlite3, reportez-vous à stackoverflow.com/questions/82875/… . Si vous utilisez le package Python sqlite3, consultez la réponse de Davoud Taghawi-Nejad ici. Je suggère à l'OP d'ajouter Python dans le titre de la question et de sélectionner la réponse de Davoud. J'ai trouvé cette page en googlant "afficher les tables Python sqlite3" puisque Google connaît l'ancien titre de la question. Les recherches au sein de SO échoueraient ici. Sans l'angle Python, la question en double liée 82875 a reçu beaucoup plus de sagesse de la part de la foule.
Bennett Brown
Réponses:
106
Vous pouvez récupérer la liste des tables et des schémas en interrogeant la table 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
)
@ jbuddy_13 sqlite>est l'invite du client de ligne de commande sqlite. Le but de l'exemple était de montrer comment on pouvait interroger la base de données pour lister les tables et le schéma.
convertisseur42
245
En Python:
con = sqlite3.connect('database.db')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")print(cursor.fetchall())
Attention à mon autre réponse . Il existe un moyen beaucoup plus rapide d'utiliser les pandas.
# Convert file existing_db.db to SQL dump file dump.sqlimport 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)
Soyez prudent avec cela, il imprimera toutes les données de vos tables si elles sont remplies avec des instructions INSERT INTO!
RobinL
4
Après beaucoup de bidouillage, j'ai trouvé une meilleure réponse sur sqlite docs pour lister les métadonnées de la table, même les bases de données attachées.
meta = cursor.execute("PRAGMA table_info('Job')")for r in meta:print r
Les informations clés sont de préfixer table_info, et non ma_table avec le nom du descripteur de pièce jointe.
J'ai eu beaucoup d'erreurs dans l'extrait que vous avez écrit, et je ne vois pas par exemple "db_alias" dans les documents référencés ou dans d'autres exemples. Dans le contexte des autres exemples, je pense que vous voulez cette ligne, par exemple le Jobtableau: meta = cursor.execute("PRAGMA table_info('Job')") Et votre première ligne semble sans rapport avec le reste.
nealmcb
4
Si quelqu'un veut faire la même chose avec les pandas
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)
Vous pouvez utiliser cet analyseur de définition pour analyser les définitions comme le code ci-dessous:
$parser =newSqliteTableDefinitionParser;
$parser->parseColumnDefinitions('x INTEGER PRIMARY KEY, y DOUBLE, z DATETIME default \'2011-11-10\', name VARCHAR(100)');
Réponses:
Vous pouvez récupérer la liste des tables et des schémas en interrogeant la table SQLITE_MASTER:
la source
sqlite> .schema job
syntaxe invalide en python ... que me manque-t-il?sqlite>
est l'invite du client de ligne de commande sqlite. Le but de l'exemple était de montrer comment on pouvait interroger la base de données pour lister les tables et le schéma.En Python:
Attention à mon autre réponse . Il existe un moyen beaucoup plus rapide d'utiliser les pandas.
la source
cursor.close()
etdb.close()
La façon la plus rapide de faire cela en python utilise Pandas (version 0.16 et plus).
Videz une table:
Videz toutes les tables:
la source
cursor.close()
etdb.close()
.with sqlite3.connect('database.db') as db:
Je ne connais pas l'API Python mais vous pouvez toujours utiliser
la source
Voici un programme python court et simple pour imprimer les noms de table et les noms de colonne de ces tables (python 2. python 3 suit).
(EDIT: J'ai reçu des votes périodiques à ce sujet, voici donc la version python3 pour les personnes qui trouvent cette réponse)
la source
Apparemment, la version de sqlite3 incluse dans Python 2.6 a cette capacité: http://docs.python.org/dev/library/sqlite3.html
la source
Après beaucoup de bidouillage, j'ai trouvé une meilleure réponse sur sqlite docs pour lister les métadonnées de la table, même les bases de données attachées.
Les informations clés sont de préfixer table_info, et non ma_table avec le nom du descripteur de pièce jointe.
la source
Job
tableau:meta = cursor.execute("PRAGMA table_info('Job')")
Et votre première ligne semble sans rapport avec le reste.Si quelqu'un veut faire la même chose avec les pandas
la source
Vérifiez ici pour le vidage. Il semble qu'il existe une fonction de vidage dans la bibliothèque sqlite3.
la source
la source
J'ai implémenté un analyseur de schéma de table sqlite en PHP, vous pouvez vérifier ici: https://github.com/c9s/LazyRecord/blob/master/src/LazyRecord/TableParser/SqliteTableDefinitionParser.php
Vous pouvez utiliser cet analyseur de définition pour analyser les définitions comme le code ci-dessous:
la source