如何在 python-mysql 中使用 executemany 方法从外键自动导入数据

问题描述 投票:0回答:0

我有这段代码,我想从这个元组列表中获取数据库表的数据


import mysql.connector

db= mysql.connector.connect(host= 'localhost', user='root',password='',database='testdatabase_1_1')
mycursor=db.cursor()
Table1='CREATE TABLE users (id int AUTO_INCREMENT PRIMARY KEY , name VARCHAR(50), passwd VARCHAR (50))'
Table2='CREATE TABLE game (userID int PRIMARY KEY , foreign key (userID) REFERENCES users(id), game1 int default 0 , game2 int default 0)'

# mycursor.execute(Table1)
# mycursor.execute(Table2)

usernames=[('tim','techwithwim'),
           ('joei','joy123'),
           ('sara','sara1234')
           ]

scores=[(45,100),
        (30,200),
        (46,124)
        ]

mycursor.executemany('INSERT INTO users (name, passwd) values (%s,%s)' ,usernames)
mycursor.executemany('INSERT INTO game (userID, game1, game2) VALUES (%s, %s, %s)', scores)
db.commit()

我知道可以使用loop方法和lastrowid方法自动填充第二张表(游戏)的数据,像这样:

import mysql.connector

db= mysql.connector.connect(host= 'localhost', user='root',password='',database='testdatabase_1_1')
mycursor=db.cursor()
Table1='CREATE TABLE users (id int AUTO_INCREMENT PRIMARY KEY , name VARCHAR(50), passwd VARCHAR (50))'
Table2='CREATE TABLE game (userID int PRIMARY KEY , foreign key (userID) REFERENCES users(id), game1 int default 0 , game2 int default 0)'

# mycursor.execute(Table1)
# mycursor.execute(Table2)

usernames=[('tim','techwithwim'),
           ('joei','joy123'),
           ('sara','sara1234')
           ]

scores=[(45,100),
        (30,200),
        (46,124)
        ]


Q3= 'insert into users (name, passwd)  values (%s,%s)'
Q4='insert into game(userID,game1,game2) values (%s,%s,%s)'


for x, user in enumerate(usernames):
    mycursor.execute(Q3,user)
    last_id= mycursor.lastrowid
    mycursor.execute(Q4 ,(last_id,) + scores[x] )
db.commit()

但是我想对 executemany 方法做同样的事情而不会看到这个错误:

raise InterfaceError(f"Failed executing the operation; {err}") from None mysql.connector.errors.InterfaceError:执行操作失败; SQL 语句的参数不足

python foreign-keys mysql-python
© www.soinside.com 2019 - 2024. All rights reserved.