181 votes

Liste des tables, schéma de la base de données, dump etc. en utilisant l'API Python sqlite3

Pour une raison quelconque, je n'arrive pas à trouver un moyen d'obtenir les équivalents des commandes shell interactives de sqlite :

.tables
.dump

en utilisant l'API Python sqlite3.

Il y a quelque chose comme ça ?

1 votes

Je suggère de renommer la question en quelque chose de non spécifique à Python puisque la réponse est en fait universelle pour les interfaces qui utilisent SQL.

2 votes

C'est vrai, bien que je m'attendais à une API python lorsque je l'ai demandé. Je vais essayer de trouver le bon nom.

3 votes

Si vous voulez afficher les tables à partir de l'invite de commande sqlite3, reportez-vous à stackoverflow.com/questions/82875/ . Si vous utilisez le paquetage Python sqlite3, voir la réponse de Davoud Taghawi-Nejad ici. Je suggère que le PO rajoute Python dans le titre de la question et sélectionne la réponse de Davoud. J'ai trouvé cette page en googlant "show tables Python sqlite3" puisque Google connaît l'ancien titre de la question. Les recherches au sein de SO n'aboutiraient pas ici. Sans l'angle Python, la question dupliquée liée 82875 a reçu beaucoup plus de sagesse de la part de la foule.

298voto

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.

15 votes

Pour les utilisateurs venant faire du copier/coller : Assurez-vous de cursor.close() y db.close()

2 votes

Cela semble être la bonne réponse mais le PO en a approuvé une autre...

3 votes

@a_a_a Umm 4 ans de différence ?

107voto

converter42 Points 3264

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
)

2 votes

sqlite> .schema job syntaxe invalide en python... qu'est-ce que je rate ?

1 votes

@jbuddy_13 voir le autre réponse

1 votes

@jbuddy_13 sqlite> est l'invite du client en ligne de commande sqlite. Le but de l'exemple était de montrer comment on peut interroger la base de données pour lister les tables et les schémas.

33voto

finnw Points 24592

Je ne suis pas familier avec l'API Python mais vous pouvez toujours utiliser

SELECT * FROM sqlite_master;

17voto

checkit Points 103

Apparemment, la version de sqlite3 incluse dans Python 2.6 possède cette capacité : 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 votes

Attention, cela imprimera toutes les données de vos tables si elles sont remplies avec des instructions INSERT INTO !

0 votes

Heureusement, INSERT INTO sont d'une seule ligne, ce qui permet d'y échapper facilement if line.startswith("INSERT INTO") ...

2voto

Angel Points 616

Vérifiez aquí pour la décharge. Il semble qu'il y ait une fonction dump dans la bibliothèque sqlite3.

0 votes

J'essaie : import sqlite3 con = sqlite3.connect("test.db") con.dump() Ca échoue... Je continue à vérifier

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X