Python使用pyodbc向SQL Server建表时关键字作列名报错如何解决
问题原因
- 反引号是MySQL等数据库的保留字转义语法,SQL Server原生不支持该写法
- 双引号转义标识符需要提前开启
QUOTED_IDENTIFIER配置,SQL Server默认该配置为关闭状态,此时双引号会被识别为字符串边界符,因此触发语法错误
解决方案
SQL Server原生支持使用方括号[]包裹保留关键字作为标识符使用,无需额外修改配置,兼容性最优,修改后的代码如下:
cnxn = pyobdc.connect(...) cursor = cnxn.cursor() # 用方括号包裹保留关键字exit作为列名 sql = 'create table if not exists tab1 (id integer primary key, entry varchar (200), [exit] varchar (200))' cursor.execute(sql) cnxn.commit()
注意事项
后续对该列进行增删改查操作时,也需要用方括号包裹exit列名,例如查询语句写为SELECT id, entry, [exit] FROM tab1,否则仍会触发保留字语法错误。
如果确实需要使用双引号转义的写法,可以在建表前先执行开启配置的语句:
# 先开启QUOTED_IDENTIFIER配置 cursor.execute("SET QUOTED_IDENTIFIER ON") sql = 'create table if not exists tab1 (id integer primary key, entry varchar (200), "exit" varchar (200))' cursor.execute(sql)
内容的提问来源于stack exchange,提问作者Dhanush Gontla
相关产品推荐
相关产品推荐

