我正在尝试使用pyodbc用一个很长的多行字符串更新现有的MS Access数据库表。该字符串实际上是一个csv,它已被转换为字符串。
我试图用来更新表的查询如下:
query = """
UPDATE Stuff
SET Results = '{}'
WHERE AnalyteName =
'{}'
""".format(df, analytename)
完整的打印声明如下:
UPDATE Stuff
SET Results =
'col a,col b,col c,...,col z,
Row 1,a1,b1,c1,
...,...,...,...,
Row 3000,a3000,b3000,c3000'
WHERE AnalyteName = 'Serotonin'
然而,这似乎不起作用,我不断得到以下错误:
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement. (-3503) (SQLExecDirectW)')
我认为这是由于我试图使用csv字符串更新表的格式造成的。
我尝试过使用INSERT
并插入一个带有csv字符串和其他相关信息的新行,这似乎很有效。但是,我需要使用UPDATE
,因为我最终将向这些列添加其他csv字符串。这让我相信A(我的UPDATE
查询的语法有问题(我是SQL语法的新手(,或者B(我在有关UPDATE
查询的文档中遗漏了一些内容。
像这样执行UPDATE
查询可能吗?如果是这样,我哪里错了?
它将由表的字段类型决定。对于大量文本,您需要在数据库表中使用blob字段。blob字段将存储二进制信息,因此使用blob不会"看到"非法字符。
回答我自己的问题,以备其他人使用。
事实证明,我缺少的是UPDATE语句中表列字段周围的括号。我的最终代码看起来是这样的。
csv = df.to_csv(index=False)
name = 'some_name'
query = """
UPDATE Stuff
SET
[Results] = ?
WHERE
[AnalyteName] = ?
"""
self.cursor.execute(query, (csv, name))
我在这里看到过其他几篇文章,其中列名周围没有括号。然而,由于这是MS Access,我相信它们是这个查询所必需的,或者更确切地说是这个特定的查询,因为它在SET
语句中包含了一个非常长的strong。
我欢迎其他人在这里提供一种更有效的方法来执行这项任务,或者其他人可以提供更多的见解来了解为什么这对我有效。