python中连接mysql数据库
一、安装pymysql
pip install pymysql
二、python文件中导入pymysql
import pymysql
三、连接数据库
conn = pymysql.connect(host="127.0.0.1", # 数据库IP地址,必须传递
user="root", # 用户名,必须传递
password="******", # 密码,必须传递
port=3307, # 端口,必须传递
database="test_01") # 数据库名称,可以不传
- 备注: 不传database时,执行的sql需写对应的数据库名
- 作用:可同时操作多个数据执行sql
- sql区别演示:
不带库查询: select * from user
带库查询:select * fromtest_01
.user
四、建立游标
- 游标的概念:游标是一种临时的数据库对象,可以用来存放在数据表中的数据行副本,也可以指向存储在 数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。
curs = conn.cursor()
- 建立字典对象的游标
curs = conn.cursor(pymysql.cursors.DictCursor)
五、执行sql并获取结果
r = curs.execute("sql")
curs.fetchall() # 使用游标获取全部查询结果
r = curs.execute("insert into user (name, age) values ("zhangsan", 18)")
conn.commit() # 使用连接对象提交sql执行结果 = 保存数据
完整示例
import pymysql
from pprint import pprint
# 创建数据库连接
conn = pymysql.connect(host="127.0.0.1",
user="root",
password="******",
port=3307,
database="test_01")
# 实例一个游标,使用游标执行sql
curs = conn.cursor(pymysql.cursors.DictCursor)
# 使用游标执行sql
curs.execute("select * from user")
pprint(curs.fetchall())
六、关闭游标
curs.close()
七 、关闭连接
conn,close()
示例代码
import pymysql
# 创建数据库连接
conn = pymysql.connect(host="127.0.0.1",user="root",password="******",port=3307,database="test_01") # conn是连接数据库的对象
# 实例一个游标,使用游标执行sql
curs = conn.cursor(pymysql.cursors.DictCursor)
# 使用游标执行sql
curs.execute("select * from user")
conn.close() # 关闭连接,无法操作数据库
八、pymysql常用封装
from pprint import pprint
import pymysql
class ApiMysql():
def __enter__(self):
self.conn = pymysql.connect(host="127.0.0.1",
user="root",
password="******",
port=3307,
database="test_01")
self.curs = self.conn.cursor(pymysql.cursors.DictCursor)
return self
def crud_table(self,sql):
'''
增删改方法
:param sql: sql语句
:return: 无
'''
self.curs.execute(sql)
self.conn.commit()
def retrieve_table(self,sql):
'''
查询方法
:param sql: sql语句
:return: 查询结果:列表嵌套字典或空列表
'''
self.curs.execute(sql)
return self.curs.fetchall()
def __exit__(self, exc_type, exc_val, exc_tb):
self.curs.close()
self.conn.close() # 关闭连接
if __name__ == '__main__':
with ApiMysql() as a:
data = a.retrieve_table("select * from user")
pprint(data)
十、读取配置文件连接数据库
- 实际开发中,不会随便修改业务相关代码,关键的信息通过读取配置文件获取
- 新建配置文件
# 新建的配置文件:db_info.py
database_info = dict(host="127.0.0.1",
user="root",
password="******",
port=3307,
database="test_01")
- 读取配置文件(导包)
from db_info import database_info
- 修改后的代码
import pymysql
from db_info import database_info
class ApiMysql():
def __enter__(self):
self.conn = pymysql.connect(**database_info) # 使用**进行字典拆包
self.curs = self.conn.cursor(pymysql.cursors.DictCursor)
return self
def crud_table(self,sql_list):
'''
增删改方法
:param sql: sql语句列表
:return: 无
'''
for sql in sql_list:
self.curs.execute(sql)
def retrieve_table(self,sql):
'''
查询方法
:param sql: sql语句
:return: 查询结果:列表嵌套字典或空列表
'''
self.curs.execute(sql)
return self.curs.fetchall()
def __exit__(self, exc_type, exc_val, exc_tb):
self.curs.close() # 关闭游标
self.conn.close() # 关闭连接
if __name__ == '__main__':
with ApiMysql() as a:
data = a.retrieve_table("select * from user")
a.conn.commit() # 使用实例对象a调用commit()方法提交
- 作用:当切换数据库环境时,无需修改代码,只需要修改配置文件即可