如何将两个嵌套列表转换为数据库数据,使一个表的列成为主键,另一个表的列成为外键

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

如何将来自两个 python 嵌套列表或列表元组(即:

usernames
scores
)的数据转换为名为
users
的数据库的两个表(
game
'testdatabase_1_1'
),以便第一列一张表(
id
)的(
users
)将是
primary key
,另一张表(
userID
)的列(
game
)将是
foreign key

我想用

cursor.executemany 
的方法而不是
cursor.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)
        ]

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()

当我想在

executemany
方法中执行这些请求时出现此错误:

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

当我更改这部分代码时:

mycursor.executemany('INSERT INTO game (userID, game1, game2) VALUES (%s, %s, %s)', scores)

mycursor.executemany('INSERT INTO game (userID, game1, game2) VALUES (%s, %s, %s)', *scores)

它提高:

executemany() 接受 3 个位置参数,但给出了 5 个

注意,我知道可以通过使用

for 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()
python foreign-keys primary-key mysql-python nested-lists
© www.soinside.com 2019 - 2024. All rights reserved.