首页 > 数据库 >利用python连接MySQL数据库

利用python连接MySQL数据库

时间:2024-08-26 11:17:37浏览次数:9  
标签:python 数据库 MySQL pymysql cursor sql rst close conn

利用python连接MySQL数据库

1、准备工作:

(1)事先在系统中已经安装好mysql数据库
(2)在系统控制台通过pip install pymysql,安装python的第三方数据库模块

2、利用python连接数据库

#导入模块
import pymysql
# 连接数据库
conn = pymysql.connect(host="127.0.0.1",user="root",password="123",database="test",charset="utf8")

需要注意的是:为避免出现中文乱码,最好填写charset="utf8",中间没有"-",若写成"utf-8"是错误的。
如果觉得麻烦的话,有个方法,首先找到系统中pymysql包安装的位置,在cmd中输入pip show 模块名即可找到。
然后进入"pymysql"文件夹,找到里面的"connections.py"文件并打开,"ctrl+F"找到"charset"默认情况下是空值,输入"utf8",同样不需要"-"。
3So4Ve.png
到此你就完成了对系统中的数据库的连接。

3、创建数据库表格

#获取一个光标对象
cursor = conn.cursor()
#定义一个sql语句
sql = '''
create table employee(
eid char(10) not null,
ename char(10),
whno char(10),
salary float,
primary key(eid)
)
'''
# 执行sql语句
cursor.execute(sql)
# 关闭光标对象
cursor.close()
# 关闭数据库连接
conn.close()

4、增、删、改操作

import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor()
# 增操作
sql = "insert into employee values ('001', '王三', '301', 1000.0)"
cursor.execute(sql)
# 也可同时插入多条数据
# sql = "insert into employee values ('%s')"
# cursor.executemany(sql,[('001', '王三', '301', 1000.0),('002', '李四', '302', 3000.0)]) 
# 改操作
# sql = "update employee set ename = "小李" where id = '001'"
# cursor.execute(sql)
# 删操作
# sql = "delete from employee where eid = '001'"cursor.execute(sql)
#一定记得commit
conn.commit()
cursor.close()
conn.close()

这里值得注意的是,必须要在完成操作之后使用commit()命令进行提交,否则操作的数据不生效。

5、数据的查询操作

fetchone():获取下一行数据,第一次为首行;
fetchall():获取所有行数据源
fetchmany(n):获取n行数据
(1)使用fetchone():

import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor()
sql = 'select * from employee'
cursor.execute(sql)
rst = cursor.fetchone()
print(rst)
# 查询第二行数据
next_rst = cursor.fetchone()
print(next_rst) 
cursor.close()
conn.close()

运行结果:

('001', '王三', '301', 1000.0)
('002', '李四', '302', 3000.0)
>>> 

(2)使用fetchall():

import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor()
sql = 'select * from employee'
cursor.execute(sql)
# 获取所有的数据
rsts= cursor.fetchall()
print(rsts)
cursor.close()
conn.close()

运行结果:

(('001', '王三', '301', 1000.0), ('002', '李四', '302', 3000.0))
>>> 

默认情况下,我们获取到的返回值是元组,只能看到每行的数据,却不知道每一列代表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典:

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

在fetchone示例中,在获取行数据的时候,可以理解开始的时候,有一个行指针指着第一行的上方,获取一行,它就向下移动一行,所以当行指针到最后一行的时候,就不能再获取到行的内容,所以我们可以使用如下方法来移动行指针:

cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动 

第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动

import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from employee'
cursor.execute(sql)
# 查询第一行的数据
rst = cursor.fetchone()
print(rst) 
# 查询第二行数据
rst = cursor.fetchone() 
print(rst)
cursor.scroll(-1,mode='relative') #设置之后,光标相对于当前位置往前移动了一行,所以打印的结果为第二行的数据
rst = cursor.fetchone() 
print(rst)
cursor.scroll(0,mode='absolute') #设置之后,光标相对于首行没有任何变化,所以打印的结果为第一行数据
rst = cursor.fetchone() 
print(rst)
cursor.close()
conn.close()

结果如下

{'Eid': '001', 'Ename': '王三', 'Whno': '301', 'Salary': 1000.0}
{'Eid': '002', 'Ename': '李四', 'Whno': '302', 'Salary': 3000.0}
{'Eid': '002', 'Ename': '李四', 'Whno': '302', 'Salary': 3000.0}
{'Eid': '001', 'Ename': '王三', 'Whno': '301', 'Salary': 1000.0}

(3)使用fetchmany():

import pymysql
conn = pymysql.connect(host='localhost',user='root', password='123', db='test', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from employee'
cursor.execute(sql)
# 获取2条数据
rsts = cursor.fetchmany(2)
print(rsts)
cursor.close()
conn.close()

结果如下:

[{'Eid': '001', 'Ename': '王三', 'Whno': '301', 'Salary': 1000.0}, {'Eid': '002', 'Ename': '李四', 'Whno': '302', 'Salary': 3000.0}]

标签:python,数据库,MySQL,pymysql,cursor,sql,rst,close,conn
From: https://www.cnblogs.com/jasonspace/p/18380619

相关文章

  • Python time时间格式化
    1、时间戳转换为指定格式日期importtimet=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime())print(t)timestamp=time.time()tuple_time=time.localtime(timestamp)print(tuple_time)print(time.strftime("%Y-%m-%d%H:%M:%S",tuple_time)) ......
  • VaR(风险价值模型)的Python实现案例
    VaR(ValueatRisk)即风险价值模型,是一种衡量市场风险的统计指标,用于估计在一定置信水平下,某一金融资产或证券组合在给定时间内可能遭受的最大损失。VaR的提出背景是为了解决传统资产负债管理方法的时效性不足和无法准确度量金融衍生品种的风险等问题例如,如果VaR是-5%,这意味着在......
  • 【java计算机毕设】车联网位置信息管理系统MySQL springcloud vue maven项目设计源码
    目录1项目功能2项目介绍3项目地址 1项目功能【java计算机毕设】车联网位置信息管理系统MySQLspringcloudvuemaven项目设计源码前后端可分离也可不分离 2项目介绍系统功能:车联网位置信息管理系统包括管理员、用户两种角色。管理员功能包括个人中心模块用......
  • 数据库入门之关系代数
    关系代数是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。关系代数的运算对象是关系,运算结果亦为关系。关系代数用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符比较运算符和逻辑运算符是用来辅助专门的关系运算符进行......
  • MySQL空间管理:查询、优化与碎片清理
    1.查询MySQL表空间和磁盘碎片查询表空间使用情况使用以下SQL语句可以查看数据库中各个表的表空间使用情况,包括数据大小、索引大小和空闲空间(碎片):SELECTtable_schemaAS`Database`,table_nameAS`Table`,ROUND(data_length/1024/1024,2)AS......
  • go连接MySQL数据库并查询数据
    前言要在Goland中连接数据库并查询数据,你可以按照以下步骤进行操作:提示:以下是本篇文章正文内容,下面案例可供参考一、导入所需的数据库驱动程序在你的Go代码中使用import语句导入所需的数据库驱动程序。例如,如果你使用的是MySQL数据库,可以使用以下语句导入MySQL驱动程序......
  • Linux环境下的Mysql数据库入门-基于Centos系统
    关系型数据库:oracle===》收钱,大型的公司msyql===》开源的免费的sqlserver===>微软非关系型数据库:hbase===>大数据‘Redismangdb下载mysql:yuminstallmysqlyuminstallmysql-serverrpm-qa|grep-imysql===》查看数据库有没有安装好servicemysqld......
  • 解读GaussDB(for MySQL)表级恢复,看线程数及分块分行策略如何提升恢复性能?
    本文分享自华为云社区《【华为云MySQL技术专栏】GaussDB(forMySQL)表级恢复中mydumper、myloader的应用与性能优化》,作者:GaussDB数据库。 背景介绍表级时间点恢复技术为“误删表”场景提供了一种快速且精确的恢复方案。通过将指定时间点的数据恢复到临时实例,再把用户所需的......
  • [oeasy]python031_[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics
    [趣味拓展]unix起源_Ken_Tompson_Ritchie_multics......
  • mysqldump的使用详解
    一、mysqldump简介mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。二、备份命令2.1命......