能否使用嵌套字典键作为SQL参数名称?
能否在SQL查询字符串中使用嵌套字典的键作为参数名称?
不行,原生Python DBAPI规范(比如psycopg2、MySQLdb这类数据库驱动遵循的标准)不支持%(country[id])s这种嵌套字典的参数引用语法。当你传入嵌套字典时,驱动只会解析第一层键名,无法识别嵌套层级的路径。
解决办法
1. 提前平展参数字典
把嵌套的字段提取出来,转换成单层字典再传入:
query = """ INSERT INTO person (id, name, country_id) VALUES (%(id)s, %(name)s, %(country_id)s) """ person = {'id': 1, 'name': 'First Last', 'country': {'id': 1, 'name': 'USA'}} # 提取嵌套的country.id作为单独参数 params = { 'id': person['id'], 'name': person['name'], 'country_id': person['country']['id'] } cursor.execute(query, params)
2. 使用字典解包简化写法
如果不想手动构建新字典,可以用字典解包结合单独字段的方式快速生成参数:
params = {**person, 'country_id': person['country']['id']} cursor.execute(query, params)
补充说明
如果你的项目使用了ORM框架(比如SQLAlchemy),可以直接映射嵌套对象的属性,但原生DBAPI驱动仅支持单层键值对的参数传递,无法解析嵌套路径语法。
内容的提问来源于stack exchange,提问作者hello world
相关产品推荐
相关产品推荐

