赞
踩
哈喽,大家好,我是小K,今天咋们分享的内容是:Python中如何通过pymysql模块连接数据库
相信大家都已经学过Mysql啦,对基础的增删改查都已经了如指掌了。
但是,你可能还不会Python如何连接数据库并进行增删改查 ,那么本篇文章带你学会如何通过Python连接数据库
Python版本:3.8
pymysql版本:1.0.2
先进行安装pymysql:
pip install pymysql
如果觉得慢的话,可以加上国内的源:
pip install -i https://pypi.doubanio.com/simple pymysql==1.0.2
这就是基本的连接代码:
- import pymysql
-
-
- def get_connection():
- conn = pymysql.connect(
- host='localhost',
- user='root',
- password='5201314',
- database='java-test',
- charset='utf8'
- )
- cursor = conn.cursor() # 获取游标
-
- cursor.close() # 关闭游标
- conn.close() # 关闭连接
-
-
- if __name__ == '__main__':
- get_connection()
现在,我们来看每一个参数:
host: 主机地址(localhost代表本地 , 127.0.0.1也代表本地)
user: 用户名
password: 密码
database: 数据库名
charset: 字符集(这里需要注意一下,在mysql中是utf8 , 而不是utf-8)
这是建立sql游标cursor:
游标(Cursor)是用来执行 SQL 语句并处理查询结果的对象。它提供了一种在 Python 中与数据库进行交互的方式,允许你执行 SQL 查询、获取查询结果以及处理结果集。
ok, 现在我们来测试,是否连接成功
- import pymysql
- def get_connection():
- try:
- conn = pymysql.connect(
- host='localhost',
- user='root',
- password='52013144',
- database='java-test',
- charset='utf8'
- )
- cursor = conn.cursor() # 获取
- # 游标
- # 执行 SQL 查询
- cursor.execute('SELECT VERSION()')
- # 获取查询结果
- db_version = cursor.fetchone()
- print(f'Database version: {db_version[0]}')
-
- cursor.close() # 关闭游标
- conn.close() # 关闭连接
- except pymysql.MySQLError as e:
- print(e)
-
-
- if __name__ == '__main__':
- get_connection()
进行测试,查看当前数据库版本
先来错误的密码看看:
再来正确的:
先来创建一张表,通过sql语句:
这是在mysql中创建的语句:
- create table info(
- id int primary key auto_increment,
- user varchar(10) not null,
- pwd varchar(10)
- );
- # 链接数据库
- import pymysql
- def get_connection():
- try:
- conn = pymysql.connect(
- host='localhost',
- user='root',
- password='5201314',
- database='java-test',
- charset='utf8'
- )
- cursor = conn.cursor() # 获取
- # 游标
- # 执行 SQL 查询
- cursor.execute('SELECT VERSION()')
- # 获取查询结果
- db_version = cursor.fetchone()
- print(f'Database version: {db_version[0]}')
-
- cursor.execute('insert into info (user,pwd) values ("jiaoxingk", "12dd");')
- conn.commit()
-
- cursor.close() # 关闭游标
- conn.close() # 关闭连接
- except pymysql.MySQLError as e:
- print(e)
-
-
- if __name__ == '__main__':
- get_connection()
这里需要注意,一定要提交才行
- sql = "insert into info (user,pwd) values ('%s', '%s');" %('kk' , '1231')
- cursor.execute(sql)
这种方法,可以动态传入一些变量参数
- sql = "insert into info (user,pwd) values (%s, %s);"
- cursor.execute(sql , ('diaomao' , '23123'))
- conn.commit()
需要注意:方法2的%s有引号,方法3的%s没有引号 ,这是因为使用这种方式,会把引号当成普通的数据写入到数据库中!
这是多条插入的方法:
- info_list = [('jiaoxik{}'.format(i), 'ddwass{}'.format(i)) for i in range(5, 101)]
- sql = "insert into info (user,pwd) values (%s, %s);"
- cursor.executemany(sql , info_list)
- conn.commit()
- sql = 'delete from info where user = %s;'
- cursor.execute(sql , 'jiaoxingk')
- conn.commit()
- sql = 'update info set user = %s where user = %s;'
- cursor.execute(sql , ('jiaoxingk','kk'))
- cursor = conn.cursor() # 获取游标
-
- sql = 'select id, user, pwd from info;'
- rows = cursor.execute(sql)
- print(rows)
-
- conn.commit()
如果直接打印返回值rows,得到的是所有记录的条数。
想要得到记录内容可以使用fetch系列:
一条一条取
- cursor = conn.cursor() # 获取游标
-
- sql = 'select id, user, pwd from info;'
- cursor.execute(sql)
- print(cursor.fetchone())
- print(cursor.fetchone())
-
- conn.commit()
默认从开始取指定条数。
- cursor = conn.cursor() # 获取游标
-
- sql = 'select id, user, pwd from info;'
- cursor.execute(sql)
- print(cursor.fetchmany(3)) # 默认从开始取指定条数
-
- conn.commit()
取所有
- cursor = conn.cursor() # 获取游标
-
- sql = 'select id, user, pwd from info;'
- cursor.execute(sql)
- print(cursor.fetchall())
-
- conn.commit()
如果你每次看打印结果的话,结果都是以元组套元组的形式返回。
- cursor = conn.cursor()
- cursor.execute('select * from info;')
- print(cursor.fetchmany(2)) # ((7, 'jiaoxingk', '1231'), (8, 'jiaoxingk', '1231'))
我们也可以控制返回形式,比如以列表套字典的形式:
- from pymysql.cursors import DictCursor
- cursor = conn.cursor(cursor=DictCursor) # 需要在实例化游标对象的时候,传个参数
- cursor.execute('select * from info;')
- print(cursor.fetchmany(2)) # [{'id': 7, 'user': 'jiaoxingk', 'pwd': '1231'}, {'id': 8, 'user': 'jiaoxingk', 'pwd': '1231'}]
- conn.commit()
先来看相对定位,根据当前的游标位置移动。
- cursor = conn.cursor(cursor=DictCursor)
-
- cursor.execute('select * from info;')
- print(cursor.fetchone()) # 此时游标在第一行
- cursor.scroll(1, 'relative') # 光标按照相对位置移动一位,此时在2
- print(cursor.fetchone()) # 取第3行记录
-
- conn.commit()
- cursor.close()
- conn.close()
接下来看绝对定位:
- cursor = conn.cursor(cursor=DictCursor)
-
- cursor.execute('select * from info;')
- print(cursor.fetchone()) # 此时游标在第一行
- cursor.scroll(1, 'absolute') # 光标按照绝对位置移动一位,此时在1
- print(cursor.fetchone()) # 取第2行记录
-
- conn.commit()
- cursor.close()
- conn.close()
好啦,今天的分享就到这里了。
通过pymysql我们能成功在python环境下连接数据库,并进行增删改查
在后续使用时,如果遇到需要在Python代码里保存数据库操作的话,那么这个方法无疑是最佳的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。