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.
conn = sqlite3.connect('/path/to/your/sqlite_file.db')
c = conn.cursor()
for item in my_list:
c.execute('insert into tablename values (?,?,?)', item)
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()
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.
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)
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()