【发布时间】:2020-03-12 22:47:56
【问题描述】:
我正在使用 engine.execute() 运行原始 SQL 来更改 SQL Server 中的列名,如下所示:
engine.execute('exec sp_rename 'table_name."Old Column Name"', 'NewColumnName', 'COLUMN'')
我没有收到任何错误,日志显示我正在尝试执行的行,但更改未反映在表中。
查看日志:
2020-03-16 09:33:15,671 INFO sqlalchemy.engine.base.Engine exec sp_rename 'table_name."Old Column Name"', 'NewColumnName', 'COLUMN'
2020-03-16 09:33:15,671 INFO sqlalchemy.engine.base.Engine ()
2020-03-16 09:33:15,769 INFO sqlalchemy.engine.base.Engine ALTER TABLE table_name ALTER COLUMN [Column Name] date
2020-03-16 09:33:15,769 INFO sqlalchemy.engine.base.Engine ()
2020-03-16 09:33:15,773 INFO sqlalchemy.engine.base.Engine COMMIT
它显示了我正在尝试重命名列的位置,但它没有提交。之后,它显示我在哪里更改列数据类型并显示它已提交。如果我将尝试执行的行从日志复制到 DataGrip 控制台并运行它,则名称更改成功。
注意:CSV 中的所有列名都有空格,而且很多都有特殊字符。用括号括起来的列名已经解决了我执行原始 SQL 的其他地方的问题。我已经在 DataGrip 控制台中尝试了括号和双引号,所以我认为在这种情况下这不是问题。不过我肯定是错的。
感谢任何帮助。
python 2.7
熊猫 0.20.3
sqlalchemy 1.3.13
【问题讨论】:
-
欢迎来到 SO。那里缺少引号吗?
-
谢谢!我期待着更多的参与。您认为我可能在哪里缺少引号?
-
嗨@DarkMarcos,无论您为整个字符串选择什么引号,都需要用\转义相应的内部(双)引号。如果你使用 ' 你需要用 \' 转义内部;与“-> \”相同。我想知道这是否是一个错字,或者您的代码中有这样的错误。这可能是造成问题的原因。
-
@Ictus,我正在转义内部引号。我没有在此处的代码中包含它以使其更具可读性。
标签: python sql-server sqlalchemy