簡體   English   中英

SQL語句中的語法錯誤:適用於Python 3.6的UPDATE

[英]Syntax error in SQL statement: UPDATE for Python 3.6

我正在嘗試使用以下命令來更新H2數據庫的書本表的列 (通過JayDeBeApi):

sqlCommand = "UPDATE book SET keys = %s WHERE keys IS NULL AND id = %d"
val = (keyWords, idBook)
mydb.execute(sqlCommand, val)

keyWords是字符串類型,而idBook是int類型。 該表具有更多列(但這些是相關的列),並使用Spring-Boot生成:

@Id
private Integer id;

@Column(columnDefinition="varchar(5000)")
private String keys;

但我收到此錯誤:

Traceback (most recent call last):
  File "init.py", line 43, in <module>
    sql.execute(sqlCommand, val)
  File "C:\Users\Us\AppData\Local\Programs\Python\Python36-32\lib\site-packages\jaydebeapi\__init__.py", line 498, in execute
    self._prep = self._connection.jconn.prepareStatement(operation)
jpype._jexception.JdbcSQLExceptionPyRaisable: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "UPDATE BOOK SET KEYS = %[*]S WHERE KEYS IS NULL AND ID = %D "; expected "DEFAULT, NOT, EXISTS, INTERSECTS, SELECT, FROM, WITH"; SQL statement:
UPDATE book SET keys = %s WHERE keys IS NULL AND id = %d [42001-197]

我看到問題是由格式類型引起的,但是我絕對不知道如何解決它。

任何幫助表示贊賞。

從文檔(實際上是一個錯誤的問題要堅持Python的PEP 249標准),它出現在JayDeBe API使用qmarks, ? ,用於類似於大多數JDBC連接的參數占位符。

因此,必須在准備好的語句中為所有參數值使用這些占位符,而不能按類型(即數字,字符串,日期)進行區分。 數據庫負責類型轉換。

sqlCommand = "UPDATE book SET keys = ? WHERE keys IS NULL AND id = ?"
val = (keyWords, idBook)

mydb.execute(sqlCommand, val)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM