gpt4 book ai didi

python - 有没有办法创建变量来存储数据库中列的值,而无需在 pymysql 中多次执行相同的查询?

转载 作者:行者123 更新时间:2023-11-29 06:30:38 25 4
gpt4 key购买 nike

我正在用 python 创建一个简单的程序,我想创建变量来存储学生数据库每列的值。我发现每次我想分配一个新变量时都需要执行一个查询。有没有办法创建这些变量而无需多次执行相同的查询?

import pymysql 
conn = pymysql.connect(host='localhost',
cursorclass=pymysql.cursors.DictCursor,
user='root',password='***')

conn.autocommit(True)
cur = conn.cursor()
students = [[1,'Hubert',4.0],
[2,'Macia',3.2],
[3,'Pontas',3.5],
[4,'Bartek',4.0],
[5,'Dundersztyc',2.1],
[6,'Diabel',2.7],
[7,'Kondzias',3.1],
[8,'Krapol',3.4],
[9,'Any',2.8],
[10,'Jacenty',2.5]]
try:
use = 'USE students'
cur.execute(use)
for identi,name,gpa in students:
query1 = 'INSERT INTO students (id,st_names,gpa) VALUES
(%s,%s,%s)'
cur.execute(query1,(identi,name,gpa))
query = 'SELECT * FROM students'

cur.execute(query)
ids = [ide['id'] for ide in cur]

cur.execute(query)
names = [name['st_names'] for name in cur]

cur.execute(query)
gpas = [gpa['GPA'] for gpa in cur]

finally:
conn.close()

当我打印 ids、names、gpas 时,只有在获得第一个 ids 列表后才执行查询。名字和 gpa 都是空的。

最佳答案

用这个表达...

ids = [ide['id'] for ide in cur]

...您迭代光标,这耗尽了迭代器。下次您迭代它时,就没有什么可以循环的了,因此列表 comp 返回一个空列表。
再次执行查询会创建一个新的迭代器,但您必须为要检索的每个字段执行此操作。

每个DB API兼容游标提供了fetch的方法已在游标中执行的 SQL 语句的结果(或其部分)。

由于 PyMySQL 兼容 DB API,这些 methods可供您使用。就您而言,您可能想要...

query = 'SELECT * FROM students'
cur.execute(query)
result = cur.fetchall()

...检索代表完整结果集的字典列表。

# [{'id': 1, 'st_names': 'Hubert', 'GPA': 4.0}, {'id': 2, 'st_names': 'Macia', 'GPA': 3.2}, ...]

顺便说一句,executemany()让您无需手动循环查询参数序列即可进行批量插入:

query1 = 'INSERT INTO students (id,st_names,gpa) VALUES (%s,%s,%s)'
cur.executemany(query1, students)

关于python - 有没有办法创建变量来存储数据库中列的值,而无需在 pymysql 中多次执行相同的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56458294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com