如何创建 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 命令,每个要添加的列一个。你可以

  1. 为单列命令创建一个列表,每个命令的形式为 ADD columnName column format
  2. headers
  3. 的每个元素填充一个列数据部分
  4. join 它们构建了完整的查询序列。 ADD 部分必须用逗号分隔 ,
  5. 将加入的列表附加到初始 ALTER TABLE。查询以分号 ;
  6. 结束
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。