Django-MySQL数据库的集成
Django默认集成的是SQLite数据库
在settings.py中配置MySQL连接
需要注意的是django中默认的配置文件是global_settings.py 而不是项目文件中的settings.py
1.安装mysqlclient扩展包
pip install mysqlclient
2. 修改settings.py配置文件中的DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME':'example', # 数据库名称
"HOST": "localhost", # 主机地址
"PORT": 3306, # 端口号
"USER": "example", # 用户名
"PASSWORD": "example", # 密码
"ATOMIC_REQUEST": "True" # 事务的原子性
}
3.配置操作数据库的文件db.py
from django.db import connection as conn
def update(sql, args=None):
"""
支持 增、删、改 操作,
新增返回 主键, 修改和删除 返回 影响的行数
:param sql:
:param args:
:return:
"""
# 获取游标
with conn.cursor() as cursor:
# 执行SQL
rowcount = cursor.execute(sql, args)
return cursor.lastrowid if cursor.lastrowid else rowcount
def query_one(sql, args=None):
"""
查询单条记录,返回一个 字典格式的数据,如果查不到数据,返回 None
:param sql:
:param args:
:return:
"""
# 获取游标
with conn.cursor() as cursor:
# 执行SQL
rowcount = cursor.execute(sql, args)
if rowcount > 1:
raise Exception("query_one 期望返回一条数据、但实现返回了{}条记录".format(rowcount))
# 获取 结果集
data = cursor.fetchone()
if data is not None:
# 获取查询的 字段
columns = [column[0] for column in cursor.description]
data = dict(zip(columns, data))
return data
def query_list(sql, args=None):
"""
查询多条记录,返回一个 列表格式的数据,如果查不到数据,返回 []
:param sql:
:param args:
:return:
"""
# 获取游标
with conn.cursor() as cursor:
# 执行SQL
cursor.execute(sql, args)
# 获取 结果集
data = cursor.fetchall()
# 获取查询的 字段
columns = [column[0] for column in cursor.description]
data = [dict(zip(columns, d)) for d in data]
return data
def call_proc(proc_name, args=None, callback=None):
"""
调用存储过程
:param proc_name:
:param args:
:param callback : 返回存储过程的回调函数,内置cursor参数
:return:
"""
# 获取游标
with conn.cursor() as cursor:
# 执行 存储过程
cursor.callproc(proc_name, args)
if callback is not None and type(callback) != type(call_proc):
raise Exception("callback(cursor)必须是一个函数!")
if callback is not None:
return callback(cursor)
自此,MySQL数据库配置完成。