代码之家  ›  专栏  ›  技术社区  ›  Skyly83

SQLITE3-使用循环将数据放入列中

  •  2
  • Skyly83  · 技术社区  · 7 年前

    我正在使用SQLITE3。

    在我的SQL表中,我有一个50列的表,我想在每列中放入我的\u列表的每个值,它有50个元素。

    有没有办法用python编写一个循环来将数据放入表中?我试图找到它,但什么都没有得到。。。

    我目前针对3个变量而不是50个变量的代码是:

    import sqlite3
    conn = sqlite3.connect("testdatabase.db")
    c.execute('''CREATE TABLE mytable (Column1 text, Column2 text, Column3, 
    text) ''')
    c.execute('''INSERT INTO mytable (Column1, Column2, Column3) VALUES (?, 
    ?, ?)''', (myliste[0], myliste[1], myliste[2])
    
    conn.commit()
    

    非常感谢你。

    Lcs公司

    3 回复  |  直到 7 年前
        1
  •  2
  •   Hai Vu    7 年前

    我明白你想做什么了。你几乎拥有了它。您所拥有的是写入一行数据。只要将其放入一个循环中,就可以编写整个表:

    import sqlite3
    
    conn = sqlite3.connect("testdatabase.db")
    conn.execute("CREATE TABLE mytable (Column1 text, Column2 text, Column3 text)")
    
    mytable = [
        ('a', 'b', 'c'),
        ('d', 'e', 'f'),
    ]
    
    for myliste in mytable:
        conn.execute("""INSERT INTO
                mytable (Column1, Column2, Column3)
                VALUES (?, ?, ?)""",
            myliste)
    
    conn.commit()
    

    使现代化

    要创建50列,如果已经有列列表,请替换变量 columns 以下是您自己的:

    conn = sqlite3.connect("testdatabase.db")
    conn.execute('DROP TABLE IF EXISTS mytable')
    
    # Create ['Column1', 'Column2', ..., 'Column50']
    columns = ['Column%d' % n for n in range(1, 51)]
    
    # Create 'Column1 TEXT, ... Column50 TEXT'
    columns_declaration = ', '.join('%s TEXT' % c for c in columns)
    
    conn.execute("CREATE TABLE mytable (%s)" % columns_declaration)
    
    conn.commit()
    
        2
  •  0
  •   virtualdvid    7 年前

    我回答了一个类似的问题 post 我建议创建一个csv文件,然后使用 bulk insert 而不是使用 insert into 因为逐行的速度非常慢,使用这种方法,您不需要担心列或行的数量。我是为sql server做的,但我非常确信它在sqlite中也能工作。

        3
  •  0
  •   Parfait    7 年前

    在SQL中,可以省略中的命名列 INSERT INTO 假设 每一个 正在追加列,并且值包括的数据 全部的 按相同的表顺序对齐的列。

    然后考虑动态构建用于参数化的占位符:

    placeholders = ', '.join(['?'] * 50)
    
    c.execute('''INSERT INTO mytable VALUES ({})'''.format(placeholders), mylist)