如何修复sqlite3中给出的python3 args

我正在设置一个新的烧瓶应用程序,并且我正在使用 sqlite3 作为数据库。即使我必须插入 5 个值,是否可以保持设置?


def encrypt():

    now = datetime.now()

    date_time = now.strftime("%d/%m/%Y - %H:%M")

    filename = secure_filename(request.form['filename'].replace(" ", "_").replace("(", "").replace(")", ""))

    password = request.form['password']

    username = session.get('username')

    id = request.form['id']

    type = infile[-4:]

    file = filename[:-4] + '.enc'

    infile = os.path.join(app.config['DATA_FOLDER'], filename)

    outfile = os.path.join(app.config['DATA_FOLDER'], filename[:-4] + '.enc')

    con = sqlite3.connect(app.config['DataBase'])

    cur = con.cursor()

    cur.executemany('INSERT INTO keys (id, file, type, date_time, attempts) VALUES (?,?,?,?,?)', id, file, type, date_time, "0")

    con.commit()

    con.close()

    return 'ok'

日志中显示以下错误:


File "./myapp.py", line 524, in encrypt

    cur.executemany('INSERT INTO keys (id, file, type, date_time, attempts) VALUES (?,?,?,?,?)', id, file, type, date_time, "0")

TypeError: function takes exactly 2 arguments (6 given)


qq_遁去的一_1
浏览 108回答 1
1回答

蝴蝶不菲

executemany首先,当您想将多行插入单个表时,您不需要使用它。您所拥有的只是代表单行的多个值。对 SQL 语句中的值使用占位符,并将元组作为第二个参数传递给execute.cur.execute('INSERT INTO keys (id, file, type, date_time, attempts) VALUES (?, ?, ?, ?, ?)', (id, file, type, date_time, "0"))奖励答案(executemany 案例)现在,当您想在同一个表中插入多行时,您将使用该cursor.executemany方法。这需要 2 个参数,就像您在上面的错误中发现的那样:一个字符串,代表 SQL 查询参数集合,其中每个参数是代表一行的值列表对集合中的所有参数执行 sql 查询。两者的工作示例execute,executemany可以粘贴到 Python 文件中并运行import sqlite3conn = sqlite3.connect(':memory:')cursor = conn.cursor()cursor.execute('CREATE TABLE person (first_name text, last_name text, age integer)')cursor.execute('SELECT * FROM person')print(cursor.fetchall())  # outputs []first_name, last_name, age = 'Carl', 'Cox', 47cursor.execute('INSERT INTO person (first_name, last_name, age) VALUES (?, ?, ?)', (first_name, last_name, age))cursor.execute('SELECT * FROM person')print(cursor.fetchall())  # outputs [('Carl', 'Cox', 47)]many_values = [    ('Boris', 'Brejcha', 37),    ('Mladen', 'Solomun', 43),]cursor.executemany('INSERT INTO person (first_name, last_name, age) VALUES (?, ?, ?)', many_values)cursor.execute('SELECT * FROM person')print(cursor.fetchall())  # outputs [('Carl', 'Cox', 47), ('Boris', 'Brejcha', 37), ('Mladen', 'Solomun', 43)]conn.close()因此,您会看到executemany该方法仅采用 2 个参数,但第二个参数是一个序列序列。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python