SQLite预编译语句中能否使用包含空格的命名参数?
结论
SQLite原生不支持带空格的命名参数名,你示例中给参数名加引号的写法无法被SQLite解析器识别,无法直接实现需求。
可行替代方案
- 方案1:替换空格为下划线(最推荐)
把SQL语句中的参数名和Python传入的字典键统一调整为下划线连接的格式,写法如下:cur.execute("insert into lang values (:foo_bar)", {'foo_bar': 'a'}) - 方案2:使用位置占位符
?
如果不想修改原有字典的键名,可以改用位置占位符,按参数顺序传值即可,不需要绑定参数名:cur.execute("insert into lang values (?)", ('a',)) - 方案3:加一层参数转换逻辑
如果你必须保留字典中带空格的键名,可以自己实现简单的转换逻辑,自动把键中的空格替换为下划线,再和SQL语句中的参数名匹配:params = {'foo bar': 'a'} # 自动转换参数键 converted_params = {key.replace(' ', '_'): value for key, value in params.items()} cur.execute("insert into lang values (:foo_bar)", converted_params)
内容的提问来源于stack exchange,提问作者Timmmm
相关产品推荐
相关产品推荐

