Python ODBC与Microsoft Access的INSERT INTO SELECT语法错误

1 投票
2 回答
1416 浏览
提问于 2025-04-16 21:27

我在这里和网上搜索了很久,但似乎找不到任何例子来解释为什么我在下面这行代码上遇到了语法错误:

`
        PregCode = recordsetraw.Fields.Item("PregnancyCode").value
        SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s"
        params = (PregCode)
        connection.execute(SQL, params)
        print PregCode
    recordsetraw.MoveNext()`

我收到的错误信息是:

追踪记录(最近的调用在最前面): 文件 "testdb.py",第 22 行,在 connection.execute(SQL, params) 文件 "",第 2 行,在 execute pywintypes.com_error: (-2147352567, '发生了异常。', (0, u'Microsoft JET 数据库引擎', u"查询表达式 'PregnancyCode = %s' 中的语法错误。", None, 5003000, -2147217900), None)

我尝试将 PregnancyCode 的值直接写入代码中,看看是否会有所不同,但结果还是一样,错误没有改变。

有没有人知道我哪里出错了?

2 个回答

0

你的SQL语句需要一个“INTO”子句:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s"
1

我的Python有点生疏了,记不清这种替换叫啥了,但我觉得你想用你的INSERT语句做的事情,和下面这个差不多:

>>> print "Hello %s" %("World")
Hello World

从你的代码来看:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s"
params = (PregCode)
connection.execute(SQL, params)

问题是,connection 是一个ADO连接,而它的 Execute方法 不能执行你想要的Python文本替换。

我觉得你应该在把INSERT字符串传给 connection.execute 之前,在Python里先做文本替换。也许可以这样做:

SQL = "INSERT INTO UniqueData SELECT * FROM Rawdata WHERE PregnancyCode =%s" %(PregCode)
connection.execute(SQL)

如果我写的Python代码不太对,希望这能给你一些启发,让你知道怎么修正它。

顺便说一下,你的标题提到了Python ODBC,但我没看到你的代码里用到ODBC。

撰写回答