Python:使用pyodbc替换行字段值
我正在尝试弄清楚是否可以使用 pyodbc 来替换 Microsoft Access 数据库(.accdb 或 .mdb)中的记录值。我仔细阅读了文档,注意到里面提到“行值可以被替换”,但我一直没能成功。
更具体来说,我想用一个 Python 变量来替换一行的值。我尝试过:
把连接的自动提交设置为“True”
确保这不是数据类型的问题
下面是我执行 SQL 查询的代码片段,我使用 fetchone() 只获取一条记录(我知道这个脚本的查询只返回一条记录),然后我获取某个字段的现有值(字段的位置整数存储在 z 变量中),接着我从脚本中创建的一个 Python 字典中获取想要写入该字段的新值。
pSQL = "SELECT * FROM %s WHERE %s = '%s'" % (reviewTBL, newID, basinID)
cursor.execute(pSQL)
record = cursor.fetchone()
if record:
oldVal = record[z]
val = codeCrosswalk[oldVal]
record[z] = val
我尝试了所有能想到的方法,但就是无法让它工作。我是不是误解了帮助文档的意思?
脚本运行成功,但新赋值似乎从未提交。我甚至在 record[z] = val 这一行后面加了“print str(record[z])”,想看看表中的字段是否有新值,结果打印出来的确显示新值好像生效了……但如果我在脚本结束后检查表,发现字段里的旧值依然存在。
非常感谢任何见解……我原本希望这能像在 MS Access 数据库中使用 VBA 一样,可以用 ADO Recordset 循环遍历表中的记录,并从变量中给字段赋值。
谢谢,
Tom
1 个回答
-1
在pyodbc的文档中提到的“行值可以被替换”是指你可以修改返回的行对象中的值,比如在使用这些值之前进行一些清理或转换。不过,这并不意味着这些修改会自动保存到数据库里。要想保存这些更改,你需要使用sql的UPDATE语句。