sql/python中的操作参数必须为str

sql/python中的操作参数必须为str,python,sql,database,sqlite,Python,Sql,Database,Sqlite,您可以忽略while1>0,这是我删除的专门询问我的问题的代码的一部分。当我调用函数quantity()时(在代码的另一部分中,为了提问,我也删除了它),我得到一个错误,它指出: 回溯(最近一次呼叫最后一次): 文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite connect.py”,第210行,在 数量() 文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite connect.py”,第68行,

您可以忽略while1>0,这是我删除的专门询问我的问题的代码的一部分。当我调用函数quantity()时(在代码的另一部分中,为了提问,我也删除了它),我得到一个错误,它指出:

回溯(最近一次呼叫最后一次): 文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite connect.py”,第210行,在 数量() 文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite connect.py”,第68行,数量 dbmgr.query(func) 查询中第14行的文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite connect.py” self.c.execute(arg) ValueError:操作参数必须是str


我不知道如何在不使用不安全的sql格式的情况下使func行成为字符串…

将查询参数包含在元组中:

import sqlite3, time, datetime, random, random

class DatabaseManager(object):
    def __init__(self, db):
        self.conn = sqlite3.connect(db)
        self.conn.execute('pragma foreign_keys = on')
        self.conn.commit()
        self.c = self.conn.cursor()


    def query(self, arg):
        self.c.execute(arg)
        self.conn.commit()
        return self.c

    def fetch(self):
        self.c.fetchall()
        self.conn.commit()
        return self.c

    def __del__(self):
        self.conn.close()



dbmgr = DatabaseManager("connect.db")



while 1 > 0:

    def quantity():
        x = 1
        file = open("john.txt", "r")

        for line in file:
            x = random.randint(100,10000000)
            func = "INSERT INTO test (playerNAME) VALUES (?, ?)", line, x
            dbmgr.query(func)
修改
query
方法以接受查询和参数:

query = "INSERT INTO test (playerNAME) VALUES (?, ?)"
parameters = (line, x)
然后呼叫:

def query(self, query, params=None):
    self.c.execute(query, params)
    self.conn.commit()
    return self.c

x
是一个整数。您的参数必须是stra,可以添加
args=map(str,args)
在您的
查询中
function@njzk2我应该在哪里添加它?那么什么是params=None和params变量?@Dominico909这是传递查询参数的地方-占位符的值。啊,谢谢。我对params=None的用途更感到困惑。
dbmgr.query(query, parameters)