首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以在pymysql中不多次执行相同的查询而从数据库中的列中存储值?

问是否有一种方法可以在pymysql中不多次执行相同的查询而从数据库中的列中存储值?
EN

Stack Overflow用户
提问于 2019-06-05 10:00:49
回答 1查看 170关注 0票数 0

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

代码语言:javascript
复制
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、名称、gpas时,当我只执行一次查询时,我得到了第一个ids列表。名字和gpas都是空的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 11:51:17

用这个表情..。

代码语言:javascript
复制
ids = [ide['id'] for ide in cur]

..。您在游标上迭代,这会耗尽迭代器。下一次迭代它时,就没有什么可循环的了,因此list comp返回一个空列表。

再次执行查询会创建一个新的迭代器,但是您必须对想要检索的每个字段都这样做。

每个符合DB API的游标都提供方法,用于获取已在游标中执行的SQL语句的结果(或其部分)。

由于PyMySQL与DB兼容,所以您可以使用这些方法。在你的情况下,你可能会想.

代码语言:javascript
复制
query = 'SELECT * FROM students'
cur.execute(query)
result = cur.fetchall()

..。若要检索表示整个结果集的数据集列表,请执行以下操作。

代码语言:javascript
复制
# [{'id': 1, 'st_names': 'Hubert', 'GPA': 4.0}, {'id': 2, 'st_names': 'Macia', 'GPA': 3.2}, ...]

另外,executemany()允许您在不需要手动循环查询参数序列的情况下执行批量插入:

代码语言:javascript
复制
query1 = 'INSERT INTO students (id,st_names,gpa) VALUES (%s,%s,%s)'
cur.executemany(query1, students)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56458294

复制
相关文章

相似问题

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