python - Python 替换到 Azure SQL 数据库
问题描述
我正在研究一种自动更新我们的 Azure 数据库的方法。我的第一个版本是使用 INSERT 命令,但现在我想要一个更可靠的 SELECT REPLACE 命令。以下行:
cursor.execute("SELECT REPLACE INTO [dbo].[PPC_TPEX_TEST]([Enter],[Leave],[StartTime],[EndTime],[Area], [Camera]) values(?,?,?,?,?,?)",
row['entry'], row['exit'], row['Start'], row['End'], row['Area'], row['Camera'])
只会出现以下错误:
cursor.execute("SELECT REPLACE INTO [dbo].[PPC_TPEX_TEST]([Enter],[Leave],[StartTime],[EndTime],[Area], [Camera]) values(?,?,?,?,?,?)",pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near 'Enter'. (102) (SQLExecDirectW); [42000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Statement(s) could not be prepared. (8180)")
解决方案
从上面的评论中,您似乎正在使用基于 Microsoft SQL Server(T-SQL标准)的Azure SQL 数据库。T-SQL 没有任何类似MySQL的。您可以改用MERGE,以达到与 REPLACE 相同的目的。REPLACE INTO
如果存在匹配的行,一种常见的情况是更新表中的一个或多个列。或者,如果不存在匹配行,则将数据作为新行插入。
示例(根据您的场景使用表和列):
MERGE dbo.Table1 AS target
USING (SELECT @id, @Name) AS source (Id, Name)
ON (target.Id= source.Id)
WHEN MATCHED THEN
UPDATE SET Name = source.Name
WHEN NOT MATCHED THEN
INSERT (Id, Name)
VALUES (source.Id, source.Name)
如果你想专门使用 MySQL,它也可以作为 Azure 中的不同服务提供。https://azure.microsoft.com/services/mysql/
推荐阅读
- android - 每当用户在颤动中更改操作系统主题时如何获得通知?
- mysql - 具有连接表的聚合函数。为什么这些项目有不同的客户 ID?
- r - 如何根据 df 中特定列的 nrows 减少代表的长度
- oracle - How to load flat file into Oracle database
- angular - FormGroupDirective.resetForm() 调用 Observable 事件
- java - NullPointerException Java android 工作室 setMovementMethod(LinkMovementMethod.getInstance())
- node.js - 如何删除猫鼬中的Many
- javascript - 使用 Truffle-React + IPFS 依赖问题
- javascript - 在 Three.JS 中将变量传递给 HSL 颜色值
- r - 使用 SQLite 连接数据库