tij*_*jko 22 python sqlite database-schema
我试图找到一种方法来查找数据库中的表名称(如果存在).我发现从sqlite cli我可以使用:
>.tables
Run Code Online (Sandbox Code Playgroud)
那么对于字段:
>PRAGMA TABLE_INFO(table_name)
Run Code Online (Sandbox Code Playgroud)
这显然在python中不起作用.有没有办法用python做这个或者我应该只使用sqlite命令行?
Mar*_*ers 32
来自sqlite FAQ:
在C/C++程序(或使用Tcl/Ruby/Perl/Python绑定的脚本)中,您可以通过在
SELECT名为"SQLITE_MASTER"的特殊表上执行操作来访问表和索引名称.每个SQLite数据库都有一个SQLITE_MASTER表,用于定义数据库的模式.该SQLITE_MASTER表如下所示:Run Code Online (Sandbox Code Playgroud)CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT );
因此,要获取所有表名的列表,请执行:
SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;
Run Code Online (Sandbox Code Playgroud)
要获取给定表的列名,请使用以下pragma table_info命令:
该pragma为命名表中的每列返回一行.结果集中的列包括列名,数据类型,列是否可以为NULL以及列的默认值.
这个命令可以很好地从python:
>>> import sqlite3
>>> conn = sqlite3.connect(':mem:')
>>> for row in conn.execute("pragma table_info('sqlite_master')").fetchall():
... print row
...
(0, u'type', u'text', 0, None, 0)
(1, u'name', u'text', 0, None, 0)
(2, u'tbl_name', u'text', 0, None, 0)
(3, u'rootpage', u'integer', 0, None, 0)
(4, u'sql', u'text', 0, None, 0)
Run Code Online (Sandbox Code Playgroud)
不幸的是,pragma语句不适用于参数; 你必须手动插入表名(确保它不是来自不受信任的来源并正确地转义它).
Tom*_*err 24
您应该能够从sqlite_master表中访问表名.
SELECT name FROM sqlite_master WHERE type='table';
Run Code Online (Sandbox Code Playgroud)
列的名称不能直接访问.获取它们的最简单方法是查询表并从查询结果中获取列名.
SELECT * FROM table_name LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
这是我根据Martijn的回复写的一个方便的打印机:
def printSchema(connection):
for (tableName,) in connection.execute(
"""
select NAME from SQLITE_MASTER where TYPE='table' order by NAME;
"""
):
print("{}:".format(tableName))
for (
columnID, columnName, columnType,
columnNotNull, columnDefault, columnPK,
) in connection.execute("pragma table_info('{}');".format(tableName)):
print(" {id}: {name}({type}){null}{default}{pk}".format(
id=columnID,
name=columnName,
type=columnType,
null=" not null" if columnNotNull else "",
default=" [{}]".format(columnDefault) if columnDefault else "",
pk=" *{}".format(columnPK) if columnPK else "",
))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37617 次 |
| 最近记录: |