【发布时间】:2019-06-19 18:47:23
【问题描述】:
我正在尝试为 pypyodbc SQL Server 创建一个“upsert”函数。我已经验证建立的查询将在 SSMS 中运行并获得所需的结果,但是当尝试使用 pypyodbc 执行和提交时,我收到以下错误:'HY007', '[HY007] [Microsoft][ ODBC SQL Server Driver]关联语句未准备好'。
这里是 upsert 函数:
def sql_upsert(sql_connection, table, key_field, key_value, **kwargs):
keys = ["{key}".format(key=k) for k in kwargs]
values = ["'{value}'".format(value=v) for v in kwargs.values()]
update_columns = ["{key} = '{value}'".format(key=k, value=v) for k, v in kwargs.items()]
sql = list()
#update
sql.append("UPDATE {table} SET ".format(table=table))
sql.append(", ".join(update_columns))
sql.append(" WHERE {} = '{}'".format(key_field, key_value))
sql.append(" IF @@ROWCOUNT=0 BEGIN ")
# insert
sql.append("INSERT INTO {table} (".format(table=table))
sql.append(", ".join(keys))
sql.append(") VALUES (")
sql.append(", ".join(values))
sql.append(")")
sql.append(" END")
query = "".join(sql)
print(query)
该函数以基于此其他线程How to insert or update using single query? 的格式构建查询字符串
这是一个输出示例:
更新测试集名称='john' WHERE id=3012
如果@@ROWCOUNT=0 开始
INSERT INTO test(name) VALUES('john')
结束
【问题讨论】: