首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >显示输出时出错- Python

显示输出时出错- Python
EN

Stack Overflow用户
提问于 2019-03-07 02:57:54
回答 2查看 73关注 0票数 1

我在列表中有一组数据,嵌入字典中,如下所示:

{“列表1”:“Freddy”、“36”、“fred”、“123 F”、“2017/04/25”、“list1 2”:“Tara”、“25”、“mtara”、“123 t”、“2018/03/22”}

参考符号:

{ key1:名称、年龄、昵称、用户标识、account_created_date、

..key2:name,年龄,昵称,用户标识,account_created_date }

所有数据都被插入到Python函数中的变量中,每个变量都有一个,如前所述。当我调用这个函数时,我会立即得到输出,如

输出:

弗雷迪

塔拉

但是,当我试图将数据插入sqlite数据库时,输出方式如下:

输出:

F

R

E

D

D

T

一个

R

一个

代码:

conn = sqlite3.connect(dbPath)

cur = conn.cursor()

results = cur.executemany("INSERT INTO Field (Field1) VALUES (?)", name)

conn.commit()

请你在这个问题上提供帮助。非常感谢你的帮助。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-07 06:30:10

新答案

以更直接地适应您的数据集。您需要一个字典列表,而不是列表字典,因为每个字典都有作为键的列名和与该列(键)关联的值。

代码语言:javascript
代码运行次数:0
运行
复制
names = [{'name': "Freddy"}, {'name': "Joan"}]
results = c.executemany("INSERT INTO names ('name') VALUES (:name)", names)

其余的SQLite3代码正常工作,这将输出:

代码语言:javascript
代码运行次数:0
运行
复制
Freddy
Joan

选项来使用元组的列表

您还可以使用元组列表。如果你不使用字典,你需要确保每一行都是元组形式。。每个元组都需要在一个列表中。您需要在SQL查询之后在executemany函数中调用此列表。

基本守则:

代码语言:javascript
代码运行次数:0
运行
复制
names = [("Freddy",), ("Joan",)]
results = c.executemany("INSERT INTO names (name) VALUES (?)", names)

输出:

代码语言:javascript
代码运行次数:0
运行
复制
Freddy
Joan

因此,请确保每个条目都是元组或字典形式。然后把这些元组或字典放到一个列表中。如果它是字典形式的,则不能使用“?”占位符。对每个占位符使用“:key_name”。(这里可能有不同的选择,但我还没有找到)。

原始响应

我怀疑执行者(.)应该执行(.)。我已经有一段时间没有使用SQLite3了,所以我现在就对它进行测试以确定,然后再回复您。

更新1:

我记得“?s”需要以元组的形式发送。

代码语言:javascript
代码运行次数:0
运行
复制
cur.executemany("INSERT INTO Field (Field1) VALUES (?)", name)

至少需要

代码语言:javascript
代码运行次数:0
运行
复制
cur.executemany("INSERT INTO Field (Field1) VALUES (?)", (name, ...))

但是,我只让execute() (而不是executemany())工作,这样,它就回到了相同的错误。到目前为止,这是我的工作代码:

代码语言:javascript
代码运行次数:0
运行
复制
cur.execute("INSERT INTO Field (Field1) VALUES (?)", (name,))

它给出了F,R,E,D,D,Y,因为它以元组的形式读取每个字母。如果它是元组形式,它将读“弗雷迪”全部在一次。但是,我仍然对executemany()有问题,我认为它的工作方式与我们所认为的不同。

更新2:

这是我要做的。你需要确保每一行都是元组形式。。每个元组都需要在一个列表中。您需要在SQL查询之后在executemany函数中调用此列表。

基本守则:

代码语言:javascript
代码运行次数:0
运行
复制
names = [("Freddy",), ("Joan",)]
results = c.executemany("INSERT INTO names (name) VALUES (?)", names)

完整代码:

代码语言:javascript
代码运行次数:0
运行
复制
import sqlite3

conn = sqlite3.connect('test.db')
c = conn.cursor()

# Create table
c.execute('''CREATE TABLE IF NOT EXISTS names
             (name text)''')

names = [("Freddy",), ("Joan",)]
results = c.executemany("INSERT INTO names (name) VALUES (?)", names)
conn.commit()

for row in c.execute('SELECT * FROM names'):
    print(row[0])

这张打印出来:

代码语言:javascript
代码运行次数:0
运行
复制
Freddy
Joan

更新3:

我更新了它以更直接地适应你的数据集。您需要一个字典列表,而不是列表字典,因为每个字典都有作为键的列名和与该列(键)关联的值。

这是更多的代码,我要开始工作了。

代码语言:javascript
代码运行次数:0
运行
复制
names = [{'name': "Freddy"}, {'name': "Joan"}]
results = c.executemany("INSERT INTO names ('name') VALUES (:name)", names)

在其馀代码中,它输出:

代码语言:javascript
代码运行次数:0
运行
复制
Freddy
Joan

(灵感来源于这个答案。)

票数 2
EN

Stack Overflow用户

发布于 2019-03-07 06:34:10

你可能会考虑改变

代码语言:javascript
代码运行次数:0
运行
复制
results = cur.executemany("INSERT INTO Field (Field1) VALUES (?)", name)

代码语言:javascript
代码运行次数:0
运行
复制
results = cur.executemany("INSERT INTO Field (Field1) VALUES (?)", (name))

由于预期的参数是元组,所以字符串不是作为一个整体来考虑的,而是被拆分的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55035355

复制
相关文章

相似问题

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