欢迎关注《Python之pymysql库学习》系列,持续更新

欢迎关注《Python之pymysql库学习》系列,持续更新

实现效果

实现思路

其实一半的代码就是创建数据库,创建数据表,插入数据。我已经编写了所有环境配置部分。可以恶意运行所有代码k,直接使用。

这部分代码只能运行一次(不过我加了if判断是否成立,没关系)

1.fetchone():获取一行数据,当一行数据读取困难时使用。可以缓解内存压力,但效率最低

2.fetchmany(x):获取x行数据,x为int类型,在fetchone()和fetchall()内存压力和效率之间,灵活使用

3.fetchall():一次读取所有数据。在数据量比较小的时候使用。虽然效率最高,但如果数据量大,就会卡死

4.读取大量数据时优雅的综合应用。这是使用迭代器的优雅编写方法

1.连接主机上的数据库

#######连接主机上的数据库#######

连接 u003d pymysql.connect(

主机u003d'本地主机',

用户u003d'root',

密码u003d'root',

端口u003d3306,

自动提交u003d假,

字符集u003d"utf8mb4"

)

cursor u003d conn.cursor() # 创建游标

1.为数据库创建sql

########创建数据库sql#######

#(用if判断数据库是否已经存在,只有在数据库不存在时才会创建,否则会报错。)

cursor.execute("如果 python 不存在则创建数据库")

cursor.execute("USE python") # 切换到新的python数据库

1.创建数据表

########创建数据库sql#######

#(用if判断数据库是否已经存在,只有在数据库不存在时才会创建,否则会报错。)

cursor.execute("如果 python 不存在则创建数据库")

cursor.execute("USE python") # 切换到新的python数据库

1.插入数据

########创建数据表#######

cursor.execute('如果学生存在则删除表')

用于创建表的 sql

sql u003d '''

创建表学生(

sno int(8) 主键自动_increment,

sname varchar(30) 不为空,

性别 varchar(5) ,

年龄 int(2),

分数浮动(3,1)

)

'''

cursor.execute(sql)

1.读取数据(本节重点)

########插入数据#######

sql u003d '''

插入学生(姓名、性别、年龄、分数)值(%s、%s、%s、%s)

'''

add_data_list u003d [('朝代', '人', 25, 94.6), ('马汉', '人', 27, 91.1), ('张龙', '人', 21, 88.1 ), ('赵虎', 'man', 22, 97.1)] # 批量插入列表形式的数据

cursor.executemany(sql,添加\数据\列表)

光标.close()

########读取数据#######

conn u003d pymysql.connect(hostu003d'localhost', useru003d'root', passwordu003d'root', databaseu003d'python', portu003d3306, autocommitu003dFalse)

# 从excel中读取学生的SnO、sname、sex、年龄和分数,并存入数据库

尝试:

with conn.cursor() as cursor: # 创建一个游标,其中 conn.cursor()u003du003dcursor

1.fetchone():获取一行数据,当一行数据读取困难时使用。可以缓解内存压力,但效率最低

print("1.fetchone():获取一行数据")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)#每次读取所有数据时,光标都放在最后,所以每次测试三个函数执行时都要重写光标

row u003d cursor.fetchone()#读取一行数据

while row:#只要读取到数据,row就不是None,即不为false

打印(行)

行 u003d cursor.fetchone()

2.fetchmany(x): 获取x行数据。 X 是 int 类型。 fetchone() 和 fetchall() 之间的内存压力和效率是灵活的

print("2.fetchmany(x):获取x行数据")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)

row u003d cursor.fetchmany(2) # 读取一行数据

while row:#只要读取到数据,row就不是None,即不为false。默认情况下,表示不读取数据

打印(行)

行 u003d cursor.fetchmany(2)

3.fetchall():一次读取所有数据。数据量少时使用。虽然效率最高,但如果数据量大,就会卡死

print("3.fetchall(): 一次读取所有数据")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)

row u003d cursor.fetchall() # 读取所有数据看似最简单,但需要注意的是,这是基于少量数据,硬件可以跟得上。

打印(行)

4. 读取大量数据时优雅的综合应用。这是使用迭代器的优雅编写方法

print("4.读取大量数据时的优雅集成应用")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)

for row in iter(lambda:cursor.fetchone(),None):#逐行读取,如果游标Fetchone()为None并结束for循环

打印(行)

除了 pymysql.MySQLError as err: # 捕获异常

print(err) # 如果发生异常,打印错误信息

最后:

conn.close() # 无论如何关闭连接以节省资源

实现代码

# @时间:2022/1/16 16:44

#@作者:南莉

@FileName: one 解析三种fetch py

导入 pymysql

import openpyxl #用户操作excel库

#######连接主机上的数据库#######

连接 u003d pymysql.connect(

主机u003d'本地主机',

用户u003d'root',

密码u003d'root',

端口u003d3306,

自动提交u003d假,

字符集u003d"utf8mb4"

)

cursor u003d conn.cursor() # 创建游标

########创建数据库sql#######

#(用if判断数据库是否已经存在,只有在数据库不存在时才会创建,否则会报错。)

cursor.execute("如果 python 不存在则创建数据库")

cursor.execute("USE python") # 切换到新的python数据库

########创建数据表#######

cursor.execute('如果学生存在则删除表')

用于创建表的 sql

sql u003d '''

创建表学生(

sno int(8) 主键自动_increment,

sname varchar(30) 不为空,

性别 varchar(5) ,

年龄 int(2),

分数浮动(3,1)

)

'''

cursor.execute(sql)

########插入数据#######

sql u003d '''

插入学生(姓名、性别、年龄、分数)值(%s、%s、%s、%s)

'''

add_data_list u003d [('朝代', '人', 25, 94.6), ('马汉', '人', 27, 91.1), ('张龙', '人', 21, 88.1 ), ('赵虎', 'man', 22, 97.1)] # 批量插入列表形式的数据

cursor.executemany(sql,添加\数据\列表)

光标.close()

########读取数据#######

conn u003d pymysql.connect(hostu003d'localhost', useru003d'root', passwordu003d'root', databaseu003d'python', portu003d3306, autocommitu003dFalse)

# 从excel中读取学生的SnO、sname、sex、年龄和分数,并存入数据库

尝试:

with conn.cursor() as cursor: # 创建一个游标,其中 conn.cursor()u003du003dcursor

1.fetchone():获取一行数据,当一行数据读取困难时使用。可以缓解内存压力,但效率最低

print("1.fetchone():获取一行数据")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)#每次读取所有数据时,光标都放在最后,所以每次测试三个函数执行时都要重写光标

row u003d cursor.fetchone()#读取一行数据

while row:#只要读取到数据,row就不是None,即不为false

打印(行)

行 u003d cursor.fetchone()

2.fetchmany(x): 获取x行数据。 X 是 int 类型。 fetchone() 和 fetchall() 之间的内存压力和效率是灵活的

print("2.fetchmany(x):获取x行数据")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)

row u003d cursor.fetchmany(2) # 读取一行数据

while row:#只要读取到数据,row就不是None,即不为false。默认情况下,表示不读取数据

打印(行)

行 u003d cursor.fetchmany(2)

3.fetchall():一次读取所有数据。数据量少时使用。虽然效率最高,但如果数据量大,就会卡死

print("3.fetchall(): 一次读取所有数据")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)

row u003d cursor.fetchall() # 读取所有数据看似最简单,但需要注意的是,这是基于少量数据,硬件可以跟得上。

打印(行)

4. 读取大量数据时优雅的综合应用。这是使用迭代器的优雅编写方法

print("4.读取大量数据时的优雅集成应用")

游标.执行(

'从学生中选择 sno,sname,sex,age,score'

)

for row in iter(lambda:cursor.fetchone(),None):#逐行读取,如果游标Fetchone()为None并结束for循环

打印(行)

除了 pymysql.MySQLError as err: # 捕获异常

print(err) # 如果发生异常,打印错误信息

最后:

conn.close() # 无论如何关闭连接以节省资源

总结

喜欢就给我一个👍,关注!分享更多有趣的Python知识!

版权声明:

如果发现与@mzh原著相距甚远,请务必标注原链接,以便转载

版权所有 2022 mzh

装箱:2022-1-15

欢迎关注《python之pymysql库学习》系列,持续更新

欢迎关注《python之pymysql库学习》系列,持续更新

[1.创建数据库(奶妈级图文+实现代码)]

[2.创建数据表(奶妈级图文+实现代码)]

[3.在数据表中插入单条数据(奶妈级图文+实现代码)]

[4.在数据表中插入多条数据(奶妈级图文+实现代码)]

[5.数据表更新(奶妈级图文+实现代码)]

[6.数据库删除(奶妈级图文+实现代码)]

[7.数据表查询操作(奶妈级图文+实现代码)]

[8.数据库导出的数据为excel文件(奶妈图+实现代码)]

[9.excel导入数据入库(奶妈级图文+实现代码)]

[数据库创建-数据表增删改查-数据表导出到excelexcel,导入数据到数据库-列集合(实现详细代码注释)]

[我。分析 fetchone(), fetchmany(), fetchall() (奶妈图形+实现代码)]

[二。游标相关知识(奶妈级图文+实现代码)\】

[三。 sql语句知识(奶妈级图文+实现代码)\】

[更多细节]

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐