如何从SQLite3中获取列的NOT NULL约束信息?
如何获取SQLite表的NOT NULL约束信息
嘿,别慌!这个问题其实超容易解决的😉 我们先搞清楚SQLite的PRAGMA table_info()语句返回的内容,然后就能轻松拿到NOT NULL约束的标记了。
先搞懂PRAGMA table_info的返回值
当你执行PRAGMA table_info(表名)时,SQLite会返回每一列的详细信息,每一行是一个元组,其中和我们需求相关的几个索引是:
- 索引1:列名称(就是你已经在提取的
d[1]) - 索引2:列数据类型(你提取的
d[2]) - 索引3:NOT NULL约束标记——这个就是你要找的!它的取值是
1(表示该列有NOT NULL约束)或者0(表示没有)
修改你的代码来获取NOT NULL约束
我帮你调整了代码,不仅保留了你原来的列名和类型,还新增了NOT NULL的判断,而且把结果整理成更易读的字典列表形式,方便你后续使用:
import sqlite3 # 记得要导入sqlite3哦,原代码里好像漏了这个依赖 def get_columns(obj): con = sqlite3.connect('mydatabase.db') with con: cur = con.cursor() # 用f-string拼接SQL语句,比直接+更安全,避免潜在的SQL注入风险 sql_req = f'PRAGMA table_info({obj});' cur.execute(sql_req) data = cur.fetchall() # 准备列表分别存列名、类型、NOT NULL状态 column_names = [] column_types = [] column_not_null = [] for d in data: column_names.append(d[1]) column_types.append(d[2]) # 把0/1转成布尔值True/False,用起来更直观 column_not_null.append(d[3] == 1) # 把信息整理成字典列表,后续调用时更清晰 columns_info = [] for name, col_type, is_not_null in zip(column_names, column_types, column_not_null): columns_info.append({ 'name': name, 'type': col_type, 'is_not_null': is_not_null }) if columns_info: return (1, columns_info)
怎么使用这个函数?
你可以像这样调用它,就能看到每一列的约束情况了:
# 传入你的表名'exhibit' status, columns = get_columns('exhibit') if status == 1: for col in columns: print(f"列名: {col['name']}, 类型: {col['type']}, 是否必须非空: {col['is_not_null']}")
运行后,你会得到类似这样的输出:
列名: id, 类型: INTEGER, 是否必须非空: False 列名: name, 类型: TEXT, 是否必须非空: True 列名: text1, 类型: TEXT, 是否必须非空: True ... 其他列的信息
这样你就能轻松判断每一列是否带有NOT NULL约束啦!
内容的提问来源于stack exchange,提问作者user.student
相关产品推荐
相关产品推荐

