django-集成mysql数据库

django-集成mysql数据库

  1. 安装 mysqlclient 库
pip install mysqlclient

pip install /path/to/mysqlclient-2.0.1-cp37-cp37m-win_amd64.whl
  1. 修改 settings.py 配置文件
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',
        'NAME': 'py2006',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 'root',
        'ATOMIC_REQUESTS': True
    }
}

  1. 修改 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文件的版本

  1. 使用 python 命令进入 交互式编程
import pip._internal

pip._internal.pep425tags.get_supported()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值