首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python sqlite3错误-executemany函数

Python sqlite3错误-executemany函数
EN

Stack Overflow用户
提问于 2022-04-18 06:13:16
回答 3查看 126关注 0票数 0

我从文本文件中导入数据,

1,A1,芝加哥。

2,B1,NY.

3,K2,LA.

代码语言:javascript
复制
d=open('file.txt','r')
data=d.readlines()
data1=[]
for items in data:
    data1=items.split()
    #print(data1)
    stmt = "INSERT INTO Student1 VALUES (?,?,?)"
    cu.executemany(stmt, data1)```


I am getting this error.
cu.executemany(stmt, data1)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 4, and there are 2 supplied.
EN

回答 3

Stack Overflow用户

发布于 2022-04-18 06:35:05

要使用"executemany“,需要传递元组列表:

代码语言:javascript
复制
conn = sqlite3.connect('test.db')
cu = conn.cursor()
d = open('file.txt', 'r')
data = d.readlines()
data1 = []
for items in data:
    data1 += [items.split()]
stmt = "INSERT INTO Student1 VALUES (?,?,?,?)"
cu.executemany(stmt, data1)
conn.commit()

使用executemany插入行列表。或更改为“执行”

代码语言:javascript
复制
for items in data:
    data1=items.split()
    #print(data1)
    stmt = "INSERT INTO Student1 VALUES (?,?,?)"
    cu.execute(stmt, data1)
票数 0
EN

Stack Overflow用户

发布于 2022-04-18 06:39:45

此函数需要第二个参数作为python中的元组列表。代码中的data1变量是没有元组的列表。你可以用下面这样的方法。

代码语言:javascript
复制
import sqlite3
d=open('file.txt','r')
data=d.readlines()
data1=[]
data1_in_list_of_tuple = []
for items in data:
    data1=items.split()
    data1_in_list_of_tuple.append(tuple(data1))
stmt = "INSERT INTO Student1 VALUES (?,?,?)"
cu.executemany(stmt, data1_in_list_of_tuple)
票数 0
EN

Stack Overflow用户

发布于 2022-04-18 06:56:47

因为一次只插入一个学生,所以使用cursor.execute代替。

创建数据(基本上相当于读取文件):

代码语言:javascript
复制
In [1]: txt = '''1, A1, chicago.
   ...: 2, B1, NY.
   ...: 3, K2, LA.'''
Out[1]: '1, A1, chicago.\n2, B1, NY.\n3, K2, LA.'

In [2]: data = txt.splitlines()
Out[2]: ['1, A1, chicago.', '2, B1, NY.', '3, K2, LA.']

正确的数据处理;

在每个line.

  • split的末尾
  • 移除,上的.
  • strip的所有部分。

让我们来测试如何做到这一点:

代码语言:javascript
复制
In [4]: item = [j.strip() for j in data[0][:-1].split(",")]
Out[4]: ['1', 'A1', 'chicago']

这个看起来没问题。

创建数据库和表(注意,我已经编好了字段名):

代码语言:javascript
复制
In [5]: import sqlite3

In [6]: con = sqlite3.connect(':memory:')
Out[6]: <sqlite3.Connection at 0x80414cd50>

In [7]: cur = con.cursor()
Out[7]: <sqlite3.Cursor at 0x8041aab20>

In [8]: cur.execute("CREATE TABLE Student1 (num INTEGER, grade TEXT, location TEXT)")
Out[8]: <sqlite3.Cursor at 0x8041aab20>

现在我们可以插入所有的学生:

代码语言:javascript
复制
In [9]: for line in data:
   ...:     items = tuple(j.strip() for j in line[:-1].split(","))
   ...:     cur.execute("INSERT INTO Student1 VALUES (?,?,?)", items)
   ...:    

检查它是否有效:

代码语言:javascript
复制
In [10]: for row in cur.execute("SELECT * FROM Student1"):
    ...:     print(row)
    ...:     
(1, 'A1', 'chicago')
(2, 'B1', 'NY')
(3, 'K2', 'LA')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71908172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档