Python/Pyodbc/SQL-更新表并将字段设置为CSV文件



我正在尝试使用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。

我欢迎其他人在这里提供一种更有效的方法来执行这项任务,或者其他人可以提供更多的见解来了解为什么这对我有效。

最新更新