如何通过在Python中的列表中循环来创建带有项目的SQL表键

我有一个名为headers的列表,其中包含约40-50个项目,并且我试图将它们作为表中的所有键。我正尝试避免将它们全部键入,这是到目前为止的内容:

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

但是这也不起作用:它给了我一个语法错误。

iCMS 回答:如何通过在Python中的列表中循环来创建带有项目的SQL表键

以下说明性代码用于生成作为pop_table SQL命令序列的ALTER TABLE字符串,每个要添加的列均包含一个。你可以

  1. 为单列命令创建一个列表,每个列表的格式为ADD columnName column format
  2. 使用headers的每个元素的列数据部分填充它
  3. join来构建完整的查询序列。 ADD部分必须用逗号,
  4. 分隔
  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上测试。

,

尝试将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)
,
int result = a > b;
++a;
++b;

int c;

if ( result != 0 )
{
    c = a++;
}
else
{
    c = b++;
}

也许您是这样做的?很抱歉,自从我使用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

本文链接:https://www.f2er.com/2226475.html

大家都在问