web-dev-qa-db-fra.com

Python et SQLite: insérer dans la table

J'ai une liste qui a 3 lignes représentant chacune une ligne de table:

>>> print list
[laks,444,M]
[kam,445,M]
[kam,445,M]

Comment insérer cette liste dans un tableau?

Ma structure de table est:

 nom de la table (nom varchar [100], age int, sex char [1]) 

Ou devrais-je utiliser autre chose que la liste?

Voici la partie du code actuel:

    for record in self.server:
        print "--->",record
        t=record
        self.cursor.execute("insert into server(server) values (?)",(t[0],));
        self.cursor.execute("insert into server(id) values (?)",(t[1],))
        self.cursor.execute("insert into server(status) values (?)",(t[2],));

Insérer les trois champs séparément fonctionne, mais en utilisant une seule ligne comme

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t[0],),(t[1],),(t[2],))

ou

self.cursor.execute("insert into server(server,c_id,status) values (?,?,?)",(t),)

ne fait pas.

44
webminal.org
conn = sqlite3.connect('/path/to/your/sqlite_file.db')
c = conn.cursor()
for item in my_list:
  c.execute('insert into tablename values (?,?,?)', item)
34
Dominic Rodger

il y a une meilleure façon

# Larger example
rows = [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
        ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
        ('2006-04-06', 'SELL', 'IBM', 500, 53.00)]
c.executemany('insert into stocks values (?,?,?,?,?)', rows)
connection.commit()
77
ninjasmith

Pas une réponse directe, mais voici une fonction pour insérer une ligne avec des paires colonne-valeur dans une table sqlite:

def sqlite_insert(conn, table, row):
    cols = ', '.join('"{}"'.format(col) for col in row.keys())
    vals = ', '.join(':{}'.format(col) for col in row.keys())
    sql = 'INSERT INTO "{0}" ({1}) VALUES ({2})'.format(table, cols, vals)
    conn.cursor().execute(sql, row)
    conn.commit()

Exemple d'utilisation:

sqlite_insert(conn, 'stocks', {
        'created_at': '2016-04-17',
        'type': 'BUY',
        'amount': 500,
        'price': 45.00})

Notez que le nom de la table et les noms des colonnes doivent être préalablement validés.

13
stil

Adapté de http://docs.python.org/library/sqlite3.html :

# Larger example
for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
          ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
          ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
         ]:
    c.execute('insert into stocks values (?,?,?,?,?)', t)
8
Dyno Fu

Cela fonctionnera pour un fichier df de plusieurs lignes dont le cadre de données est df et porte le même nom que les colonnes du fichier df.

tuples = list(df.itertuples(index=False, name=None))

columns_list = df.columns.tolist()
marks = ['?' for _ in columns_list]
columns_list = f'({(",".join(columns_list))})'
marks = f'({(",".join(marks))})'

table_name = 'whateveryouwant'

c.executemany(f'INSERT OR REPLACE INTO {table_name}{columns_list} VALUES {marks}', tuples)
conn.commit()
0
Alexander Novas