使用Python的psycopg2修改DECIMAL字段精度报语法错误如何解决?
报错原因
你使用的是PostgreSQL数据库(psycopg2为PostgreSQL官方Python驱动),其ALTER TABLE ALTER COLUMN修改字段类型的语法要求,指定新数据类型前必须添加TYPE关键字,你的原SQL语句缺失该关键字,因此触发语法错误,和使用NUMERIC还是DECIMAL无关。
修复代码
将SQL语句调整为如下形式即可正常执行:
query = """ALTER TABLE table_name ALTER COLUMN column_name TYPE NUMERIC (22,6);""" self.cursor.execute(query) self.connection.commit()
补充注意事项
- 替换
NUMERIC为DECIMAL也可正常运行,PostgreSQL中NUMERIC和DECIMAL语义完全等价 - 如果原字段存储的数据存在无法隐式转换为
NUMERIC(22,6)的内容,会触发数据转换报错,此时可添加USING子句手动指定转换逻辑,比如原字段为字符串类型时写法为:ALTER TABLE table_name ALTER COLUMN column_name TYPE NUMERIC (22,6) USING column_name::NUMERIC(22,6);
内容的提问来源于stack exchange,提问作者Elvin Jafarov
相关产品推荐
相关产品推荐

