我有这段代码,我想从这个元组列表中获取数据库表的数据
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 语句的参数不足