python Sqlite3参数subs

时间:2015-07-04 04:28:10

标签: python sqlite

这个类有一个小问题,可以处理我的数据库。它仍然说:

 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)

2 个答案:

答案 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)