如何使用python中循环列表的项创建sql表键

fzwojiic  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(342)

我有一张单子叫 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)"

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

uhry853o

uhry853o1#

下面的演示代码用于生成 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上测试。
zkure5ic

zkure5ic2#

尝试初始化 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)
cpjpxq1n

cpjpxq1n3#

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 如果要执行多个命令。

相关问题