私信  •  关注

Aaron Bell

Aaron Bell 最近回复了

这是港口问题。

  • 转到quickstart.py文件的第34行(或者在其中显示creds= 运行本地服务器)。
  • 转到中的flow.py文件 带有此功能的google_auth_oauthlib包(在vs代码中,单击 运行本地服务器()并按F12或右键单击并选择“转到” 定义)。

你会看到第369行(在写这篇文章的时候)说 self, host='localhost', port=8080, .

当我查看netstat时,它实际上说这个端口正在使用,可能是在一个我从未关闭过的apache服务器上。

Netstat TCP Port 8080, LISTENING

  • 将google_auth_oauthlib包中flow.py文件中的值更改为8090,因此369看起来像 self, host='localhost', port=8090, .

我再次运行quickstart.py脚本,弹出了验证我的google帐户的窗口。

我选择了我的帐户,而且成功了。不要乱动管理的东西。

我很高兴我能找到这样的端口,因为我认为端口是以某种黑盒的方式选择的,就像它是从谷歌的服务器上决定的。

6 年前
回复了 Aaron Bell 创建的主题 » sqlite3-python调用变量的问题

新答案

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

names = [{'name': "Freddy"}, {'name': "Joan"}]
results = c.executemany("INSERT INTO names ('name') VALUES (:name)", names)

剩下的sqlite3代码工作,输出:

Freddy
Joan

使用元组列表的选项

也可以使用元组列表。如果你不用字典,你需要 make sure each row is in tuple form . 你需要一个列表中的每个元组。在sql查询之后,需要在executemany函数中调用此列表。

基本代码:

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

输出:

弗莱迪
琼

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

原始回复

我怀疑executemany(…)应该是execute(…)。我已经有一段时间没有使用过sqlite3了,所以我现在将测试它以确定是否使用,然后再联系您。

更新1:

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

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

至少需要

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

但我只得到了execute()(而不是executeMany())来处理这个问题,否则它又回到了同一个错误。这是我目前的工作准则:

cur.execute("INSERT INTO Field (Field1) VALUES (?)", (name,))

它给出了f,r,e,d,d,y,因为它把每个字母作为元组中的值来读取。如果它是元组形式,它会一次读到“freddy”。但我仍然对executeMany()有问题,我认为它的工作方式与我们认为的不同。

更新2:

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

基本代码:

姓名=[(“Freddy”,),(“Joan”,)]
results=c.executemany(“插入名称(名称)值(?)”名称)

完整代码:

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])

打印出来:

弗莱迪
琼

更新3:

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

这里还有一些代码,我已经开始工作了。

名字=[{name':“freddy”},{name':“joan”}]
results=c.executemany(“插入名称('name')值(:name)”,名称)

其余代码原样输出:

弗莱迪
琼

(灵感来自 this answer )