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)
您可以忽略 while 1 > 0,这是我删除的部分代码,专门询问我的问题。当我调用函数 quantity() 时(在另一部分代码中,为了问题我也删除了),我收到一条错误消息:
追溯(最近的调用最后): 文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite-connect.py”,第 210 行,位于 数量() 文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite-connect.py”,第 68 行,数量 dbmgr.query(函数) 文件“C:\Users\senarsky.CAL\Documents\2016Sem2\Sqlite-connect.py”,第 14 行,在查询中 self.c.execute(参数) ValueError: 操作参数必须是str
我不确定如何在不使用不安全的 sql 格式的情况下使 func 行成为字符串...
最佳答案
将查询参数包含在一个元组中:
query = "INSERT INTO test (playerNAME) VALUES (?, ?)"
parameters = (line, x)
修改query
方法以接受查询和参数:
def query(self, query, params=None):
self.c.execute(query, params)
self.conn.commit()
return self.c
然后调用为:
dbmgr.query(query, parameters)
关于python - 操作参数在sql/python中必须是str,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36871773/