Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和SQLite:插入到表中_Python_Sqlite_List_Insert - Fatal编程技术网

Python和SQLite:插入到表中

Python和SQLite:插入到表中,python,sqlite,list,insert,Python,Sqlite,List,Insert,我有一个列表,其中有3行,每行代表一个表行: >>> print list [laks,444,M] [kam,445,M] [kam,445,M] 如何将此列表插入到表中 我的表格结构是: tablename(name varchar[100], age int, sex char[1]) 分别插入这三个字段可以工作,但使用一行,如 self.cursor.execute(“插入到服务器(服务器,c_id,状态)值(?,,?)”,(t[0],),(t[1],),(t[2],

我有一个列表,其中有3行,每行代表一个表行:

>>> print list
[laks,444,M]
[kam,445,M]
[kam,445,M]
如何将此列表插入到表中

我的表格结构是:

tablename(name varchar[100], age int, sex char[1]) 分别插入这三个字段可以工作,但使用一行,如

self.cursor.execute(“插入到服务器(服务器,c_id,状态)值(?,,?)”,(t[0],),(t[1],),(t[2],)

self.cursor.execute(“插入到服务器(服务器,c_id,状态)值(?,?)”,(t),)

不适用。

改编自:

有更好的办法

# 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()

不是直接回答,但这里有一个函数,用于将具有列-值对的行插入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()
使用示例:

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

请注意,表名和列名应事先进行验证。

这将适用于数据帧为df且df中列的名称与db相同的多行df

#The Best way is to use `fStrings` (very easy and powerful in python3)   
#Format: f'your-string'   
#For Example:

mylist=['laks',444,'M']

cursor.execute(f'INSERT INTO mytable VALUES ("{mylist[0]}","{mylist[1]}","{mylist[2]}")')

#THATS ALL!! EASY!!
#You can use it with for loop!
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()

谢谢Dyno和Dominic-但它不起作用-这是我正在尝试的------------对于列表中的记录:print“-->”,record cursor.execute(“insert-into-process values(?,,?)”,record)----获取错误我有try,except part-try part将有for循环并执行stmt,except part有一条消息说“insert failed”…它只是从except part打印消息并退出。如何更有效地调试它?@lakshmipathi:如果您的异常处理正在处理错误消息,那么它并没有真正处理它…如何打印错误号。。至少这会提供一些提示,除非我们使用conn.commit(),否则不会插入。它现在已经修复。我使用了这个错误的方法self.cursor.execute(“插入到服务器(服务器,c_id,状态)值(?,,?),(t[0],(t[1],),(t[2],)正确的方法是self.cursor.execute(“插入到服务器(服务器,c_id,状态)值(?,,,,,(t[0],t[1],t[2],))我对此有一个查询,因为我已经尝试过了,但我得到了一个错误,说我有6列,只提供了5列的信息。这是真的,但第1列是pk integer,不需要为其提供值。有办法克服这个问题吗?——我明白了。只需像通常一样在db名称后添加字段头。Thx我使用了一种基于包装中此答案的方法,在字段名之前的VAL中“:”是什么意思?以及如何验证名称?请注意,这种方法容易受到SQL注入攻击。
sqlite_insert(conn, 'stocks', {
        'created_at': '2016-04-17',
        'type': 'BUY',
        'amount': 500,
        'price': 45.00})
#The Best way is to use `fStrings` (very easy and powerful in python3)   
#Format: f'your-string'   
#For Example:

mylist=['laks',444,'M']

cursor.execute(f'INSERT INTO mytable VALUES ("{mylist[0]}","{mylist[1]}","{mylist[2]}")')

#THATS ALL!! EASY!!
#You can use it with for loop!
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()