django-集成mysql数据库
- 安装 mysqlclient 库
pip install mysqlclient
pip install /path/to/mysqlclient-2.0.1-cp37-cp37m-win_amd64.whl
- 修改
settings.py
配置文件
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'NAME': '数据库名称',
'PORT': 端口号,
'USER': '用户名',
'PASSWORD': '密码',
'ATOMIC_REQUESTS': True
}
}
- 修改 db.py 封装的工具类
from django.db import connection as conn
def update(sql, args=None, many=False):
"""
支持 新增、修改、删除
:param sql: 对应动作的SQL语句
:param args: SQL语句对应的参数,支持 tuple, list , dict
:param many : 如果设置为 true, 支持 批量操作
:return: number 影响的行数、 如果是执行的新增命令,返回 插入的主键
"""
# 获取数据库的连接
# 获取游标对象
with conn.cursor() as cursor:
# 执行 SQL语句、并返回影响的行数
if many:
rowcount = cursor.executemany(sql, args)
else:
rowcount = cursor.execute(sql, args)
# 获取最后插入的主键,如果无法获取,则代表不是新增命令
return cursor.lastrowid if cursor.lastrowid is not None else rowcount
def query_one(sql, args=None):
"""
查询单条记录、返回一个字典
:param sql:
:param args:
:return: dict
"""
# 获取数据库的连接
# 获取游标对象
with conn.cursor() as cursor:
# 执行 sql 语句
rowcount = cursor.execute(sql, args)
# 获取查询的结果
if rowcount > 1:
raise Exception("query_one()期待返回1条数据、实际返回的{}条记录".format(rowcount))
elif rowcount == 0:
return None
else:
# 获取插入的字段
columns = [column[0] for column in cursor.description]
# 获取查询的结果
data = cursor.fetchone()
return dict(map(lambda x, y: (x, y), columns, data))
def query_list(sql, args=None):
"""
查询多条记录、返回一个列表且列表中包含的是字典
:param sql:
:param args:
:return: list
"""
# 获取数据库的连接
# 获取游标对象
with conn.cursor() as cursor:
# 执行 sql 语句
rowcount = cursor.execute(sql, args)
# 获取插入的字段
columns = [column[0] for column in cursor.description]
# 获取查询的结果
data = cursor.fetchall()
return [dict(map(lambda x, y: (x, y), columns, d)) for d in data]
如果 mysqlclient 安装失败,提示 VC++ 类似的错误,那么采用下面的方式解决
解决方案 1 : 安装 VC++ (比较大、而且成功后不一定能解决问题)
解决方案 2 : 下载对应的 whl 文件进行离线安装
查看 当前 python 安装的 whl文件的版本
- 使用 python 命令进入 交互式编程
import pip._internal
pip._internal.pep425tags.get_supported()