如何创建 SQL table 键,其中包含循环遍历 Python 中的列表的项目
How can I create SQL table keys with items from looping through a list in Python
我有一个名为 headers
的列表,其中包含大约 40-50 个项目,我正在尝试将它们全部放入 table 中。我试图避免将它们全部输入,这是我目前所拥有的:
def createtable_db():
cnx = mysql.connector.connect(user='x', password='x', host='x', database='data')
mycursor = cnx.cursor()
create_table = "CREATE TABLE IF NOT EXISTS players (id INT AUTO_INCREMENT PRIMARY KEY)"
for h in headers:
pop_table = "ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)"
mycursor.execute(create_table)
mycursor.execute(pop_table)
cnx.close()
createtable_db()
这只会添加最后一个键,我尝试添加一个 + 来制作这一行:
pop_table += "ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)"
但这也不起作用:它给我一个语法错误。
尝试将 pop_table
初始化为一个空字符串,然后在 for 循环内连接到它。
pop_table = ''
for h in headers:
pop_table += "ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)"
您也可以将其初始化为一个空列表并附加生成的字符串
pop_table = []
for h in headers:
pop_table.append("ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)")
# join them with you choice of delimiter
joined_up = ','.join(pop_table)
pop_table = "ALTER TABLE players "
for h in headers:
pop_table += "ADD COLUMN "+ h + " VARCHAR(255), "
#Replace the last , with a ;
pop_table.replace(pop_table[len(pop_table)-1], ';')
mycursor.execute(create_table)
mycursor.execute(pop_table, multi=True)
也许如果你这样做了?抱歉,我已经有一段时间没用 mysql.connector
了。如果我没记错的话,如果你打算执行多个命令,multi
必须设置为True
。
下面的演示代码用于生成一个 pop_table
字符串作为一系列 ALTER TABLE
SQL 命令,每个要添加的列一个。你可以
- 为单列命令创建一个列表,每个命令的形式为
ADD columnName column format
- 为
headers
的每个元素填充一个列数据部分
join
它们构建了完整的查询序列。 ADD
部分必须用逗号分隔 ,
- 将加入的列表附加到初始
ALTER TABLE
。查询以分号 ;
结束
headers = [ "Stack22", "overflow22", "rules22"]
header_columns_commands =[]
for h in headers:
header_columns_commands .append("ADD "+ h +" VARCHAR(255)")
pop_table = "ALTER TABLE players " + ",".join(header_columns_commands ) + ";"
print(pop_table)
输出:
ALTER TABLE players
ADD Stack VARCHAR(255),
ADD overflow VARCHAR(255),
ADD rules VARCHAR(255);
测试于 MySQL。
我有一个名为 headers
的列表,其中包含大约 40-50 个项目,我正在尝试将它们全部放入 table 中。我试图避免将它们全部输入,这是我目前所拥有的:
def createtable_db():
cnx = mysql.connector.connect(user='x', password='x', host='x', database='data')
mycursor = cnx.cursor()
create_table = "CREATE TABLE IF NOT EXISTS players (id INT AUTO_INCREMENT PRIMARY KEY)"
for h in headers:
pop_table = "ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)"
mycursor.execute(create_table)
mycursor.execute(pop_table)
cnx.close()
createtable_db()
这只会添加最后一个键,我尝试添加一个 + 来制作这一行:
pop_table += "ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)"
但这也不起作用:它给我一个语法错误。
尝试将 pop_table
初始化为一个空字符串,然后在 for 循环内连接到它。
pop_table = ''
for h in headers:
pop_table += "ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)"
您也可以将其初始化为一个空列表并附加生成的字符串
pop_table = []
for h in headers:
pop_table.append("ALTER TABLE players ADD COLUMN "+ h +" VARCHAR(255)")
# join them with you choice of delimiter
joined_up = ','.join(pop_table)
pop_table = "ALTER TABLE players "
for h in headers:
pop_table += "ADD COLUMN "+ h + " VARCHAR(255), "
#Replace the last , with a ;
pop_table.replace(pop_table[len(pop_table)-1], ';')
mycursor.execute(create_table)
mycursor.execute(pop_table, multi=True)
也许如果你这样做了?抱歉,我已经有一段时间没用 mysql.connector
了。如果我没记错的话,如果你打算执行多个命令,multi
必须设置为True
。
下面的演示代码用于生成一个 pop_table
字符串作为一系列 ALTER TABLE
SQL 命令,每个要添加的列一个。你可以
- 为单列命令创建一个列表,每个命令的形式为
ADD columnName column format
- 为
headers
的每个元素填充一个列数据部分
join
它们构建了完整的查询序列。ADD
部分必须用逗号分隔,
- 将加入的列表附加到初始
ALTER TABLE
。查询以分号;
结束
headers = [ "Stack22", "overflow22", "rules22"]
header_columns_commands =[]
for h in headers:
header_columns_commands .append("ADD "+ h +" VARCHAR(255)")
pop_table = "ALTER TABLE players " + ",".join(header_columns_commands ) + ";"
print(pop_table)
输出:
ALTER TABLE players
ADD Stack VARCHAR(255),
ADD overflow VARCHAR(255),
ADD rules VARCHAR(255);
测试于 MySQL。