这个类有一个小问题,可以处理我的数据库。它仍然说:
cursor.execute(sql)
ValueError: operation parameter must be str
我尝试了很多东西,但没有任何工作,因为我想要。我查看了https://docs.python.org/3.4/library/sqlite3.html,我确定我做了同样的事情。
import sqlite3
class Database():
def __init__(self):
try:
self.db = sqlite3.connect('../database.sqlite')
self.cur = self.db.cursor()
self.cur.execute('pragma foreign_keys="1"')
except sqlite3.Error as e:
raise e
def select(self,sql):
cursor = self.db.cursor()
cursor.execute(sql)
records = cursor.fetchall()
cursor.close()
return records
def insert(self,sql):
cursor = self.db.cursor()
cursor.execute(sql)
newID = cursor.lastrowid
self.db.commit()
cursor.close()
return newID
def execute(self,sql):
""" execute any SQL statement but no return value given """
cursor = self.db.cursor()
cursor.execute(sql)
self.db.commit()
cursor.close()
if __name__ == '__main__':
db = Database()
#sql = "SELECT skuref, titre_prod FROM product"
t = ("888888",)
sql= "UPDATE product SET created = 1 WHERE skuref = ?", t
db.execute(sql)
如果有人可以帮助我,那将是非常感激的。后来我想在主程序中传递这样的东西for a循环
lastpost = record[0]
if created = True
sql = "UPDATE product SET created = 1 WHERE skuref = ?",(lastpost,)
db.execute(sql)
答案 0 :(得分:0)
sql
是一个包含SQL语句和参数的元组。
更改如下,以便单独传递sql和参数,而不是作为元组传递:
def execute(self, sql):
""" execute any SQL statement but no return value given """
cursor = self.db.cursor()
cursor.execute(*sql) # <------
self.db.commit()
cursor.close()
答案 1 :(得分:0)
发表声明
sql = "UPDATE product SET created = 1 WHERE skuref = ?",(lastpost,)
你已经创建了一个类似
的小教堂("UPDATE product SET created = 1 WHERE skuref = ?", (lastpost,))
您必须将参数作为参数提供给execute()
函数。
另外,您的if
声明不好:没有:
,=
而不是==
,而且对True的全部检查都不是必需的。
试试这个:
lastpost = record[0]
if created:
sql = "UPDATE product SET created = 1 WHERE skuref = ?"
db.execute(sql, lastpost)