2012-03-09 9 views
11

Il comando "pragma table_info ('tablename')" elenca le informazioni sulle colonne e "pragma foreign_key_list ('tablename')" le chiavi esterne. Come posso visualizzare altri vincoli (controllo, unico) di una tabella? Analizza solo il campo "sql" della tabella "sqlite_master"?C'è un modo per ottenere i vincoli di una tabella in SQLite?

+2

C'è anche "pragma index_list ('tablename')" Vedi http://www.sqlite.org /pragma.html#pragma_index_list – Nabab

+0

@Nabab si dovrebbe considerare di aggiungere una risposta come –

risposta

6

Penso che l'unico modo per farlo sia il modo in cui hai suggerito, analizzare la colonna sql del database sqlite_master.

codice

Python per fare questo:

import sqlite3 

con = sqlite3.connect("example.sqlite3") 
cur = con.cursor() 
cur.execute("select sql from sqlite_master where type='table' and name='example_table'") 
schema = cur.fetchone() 
con.close() 

entries = [ tmp.strip() for tmp in schema[0].splitlines() if tmp.find("constraint")>=0 or tmp.find("unique")>=0 ] 
for i in entries: print(i)