python - 操作参数在sql/python中必须是str

标签 python sql database sqlite

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/

相关文章:

用于获取员工活跃到不活跃之间的转换天数的 SQL 查询

javascript - 使用外部数据库在多个站点上更新 html 和 css

mysql - 如何使用 SUBSTR 优化查询

python bokeh 在服务器端或客户端运行

python - 如何通过 Python 使用 Selenium 单击此按钮

php - 选择查询结构

sql - oracle提高查询性能

python - 基本的神经网络预测?

python - 每个循环与 .txt 的值不同 (Python)

ios - Realm 未在 Swift 中调用