使用Python sqlite3模块如何将PRAGMA table_info()输出转为Pandas DataFrame
实现方案
最简方案:直接用Pandas读取PRAGMA查询
很多人误以为PRAGMA不属于标准SQL就不能被read_sql系列方法识别,实际上只要数据库驱动能返回带列名的结构化结果,pandas就可以正常解析。SQLite的驱动对PRAGMA查询会返回带标准列名的结果集,所以不需要手动处理fetchall()返回的元组结构,直接把PRAGMA语句传给read_sql_query就能生成和命令行结构一致的DataFrame。
示例代码:
import pandas as pd import sqlite3 conn = sqlite3.connect("目标数据库文件路径.db") # 直接传入PRAGMA查询语句即可 table_info_df = pd.read_sql_query("PRAGMA table_info('mytable')", conn) conn.close()
生成的DataFrame列名完全对齐SQLite命令行的输出结构,依次为:
cid字段序号name字段名type字段类型notnull非空约束标识(1代表是,0代表否)dflt_value字段默认值pk主键标识(1代表是,0代表否)
备选方案:手动构造DataFrame
如果已经通过原生sqlite3接口执行查询拿到了结果列表,可以手动指定固定列名生成DataFrame:
conn = sqlite3.connect("目标数据库文件路径.db") info = conn.execute("PRAGMA table_info('mytable')").fetchall() conn.close() # 按照SQLite返回的固定列结构定义列名 columns = ["cid", "name", "type", "notnull", "dflt_value", "pk"] table_info_df = pd.DataFrame(info, columns=columns)
实用提示
- 该方法对其他返回结构化结果的PRAGMA语句同样有效,比如
PRAGMA index_list('mytable')、PRAGMA foreign_key_list('mytable')都可以直接传给read_sql_query获取DataFrame - 动态传入表名时不要直接拼接字符串到查询语句中,避免SQL注入风险
- 不需要对PRAGMA语句做特殊格式改造,写法和SQLite命令行里保持一致即可
内容的提问来源于stack exchange,提问作者a11
相关产品推荐
相关产品推荐

