Django框架中的mysql数据库

本文详细介绍如何在Django框架中使用ORM进行MySQL数据库的操作,包括数据库连接配置、表结构定义、数据增删改查等核心功能,并演示了条件查询及聚合函数的使用。

1、链接数据库

mysql,sqlserver,oracle...
django默认只能链接关系型数据库

1、安装依赖的库

可以使用的库:1、pymysql
            2、python_mysql(不稳定)
            3、mysqlclient(配置麻烦)
安装pymysql:pip install pymysql
如果出现timeout超时可以使用其他的资源下载:pip install 模块名 -i http://pypi.douban.com/simple

2、导入库

在__init__文件中编写:
# 导入pymysql模块
import pymysql
pymysql.install_as_MySQLdb()

3、在setting的database中配置mysql的连接

'ENGINE':'django.db.backends.mysql',    设置驱动
'NAME':'week01',    设置数据库名
'USER':'root',      设置用户名
'PASSWORD':'dxx1123',   设置密码
'HOST':'localhost',     设置主机地址
'PORT':3306,    设置端口号

4、注意:不要忘记了在数据库中创建该库

create  database    数据库名    charset='utf8'

5、连接mysql数据库

点击左侧database--- + ---data source ---数据库类型(如:mysql)--- 设置 账户 密码 主机(注意:如果对mysql设置远程连接,需要使用远程连接的账号密码)

6、测试程序是否能连接

1、执行迁移
    python manage.py makemigrations
    python manage.py migrate
2、看到自动生成的表即可

2、orm 对象关系隐射–思想:相当于一个翻译机

object  relational  mapping

1、开发人员不需要写复杂的sql语句,直接调用对应的方法即可

2、开发人员不需要封装查询结果,查询结果直接就是对象,可以直接使用

3、如果开发人员需要更换数据库,不需要更改任何代码,直接修改数据库的连接即可

3、创建一个表

1、需要在model模块中创建一个类

注意该类必需继承models.Model
注意:表名默认是  应用名_类名

2、定义属性名—属性需要与表中字段对应

字段名即属性名
字段的数据类型
字段的约束类型

3、案例:

# 定义模型
# 注意:执行迁移后,才会在数据库自动创建对应的表
# 默认的表名为:应用名_类名 类名会自动转换成全小写
# 默认会自动创建主键id,如果使用AutoField则不会自动创建
class Person(models.Model):
    p_name = models.CharField(max_length = 20,null=False,unique=True)
    p_age = models.IntegerField(default = 10)
    p_sex = models.BooleanField(default = True)

表的结构是可以修改的,修改后,需要重新迁移才能生效,最好不要修改
修改表名:
可以使用(内部类):
class Meta:
    db_table = '表名'
修改属性名:
默认的字段名就是定义的属性名
可以使用 db_column = '字段名' 

4、增加一个数据

1、创建一个对象
2、设置属性
3、保存数据   对象名.save()

5、删除数据

mysql语句:delete from 表名 where 条件
1、要删除数据,前提条件是先查询到对应的数据
2、删除:
可以直接删除多个结果,也可以直接删除一个
查询结果.delete()

6、修改数据

mysql语句:update 表名 set 字段名=数据.. where 条件
1、要修改数据,前提条件也是先查询到对应的数据
2、修改:
对象名.属性名 = 值
对象名.save()

7、查询数据

1、查询方法

格式:类名.objects.方法   ---支持链式调用
1、有多条结果的
all()   获取所有的结果
filter(条件)  按照条件筛选数据
exclude(条件)  筛选出满足条件以外的数据
2、单个结果的
first()  获取结果集的第一个
last()  获取结果集的最后一个
get()   获取一个结果
注意:有且只有一个结果的时候使用get()才可以,如果结果超过一个或没有,程序都会出错
3、其他
count()  获取结果集的数量
order_by("-属性名")    表示按照属性名对应的值排序,默认是升序,-属性名表示降序排序
如果是字符类型的数据,是按照字符对应的ACSII码来排序的,一个字符一个字符的比较,如:'aac'  'abc' ,'aac'小
exists()    判断查询结果集中是否有数据
values()    获取结果集的数据,该数据是类似字典的形式,方便操作

2、条件中的运算符

格式:属性名__运算符 = 值   (两个下划线)
运算符:
    gt  大于
    gte 大于等于
    lt  小于
    lte 小于等于
    =   等于 exact
    不等于 exclude(条件)

    isNull  是空的数据

    startwith   查询以某个字符开始
    endwith     查询以某个字符结果
    contain     查询包含某个字符

    i 是ignore的简写,忽略大小写
    istartwith  查询以某个字符开始
    iendwith        查询以某个字符结果
    icontain        查询包含某个字符

    in  成员运算符,是否是集合中值的其中一个,满足一个就符号条件

    特殊用法** pk = 值  pk是主键的简写

3、Q与F对象

1、Q对象,用来帮助实现 逻辑运算符
需要倒包
& 且     如:...filter(Q(p_age__gt=90)&Q(p_age__lt=95))
| 或     如:...filter(Q(p_name='小明')|Q(p_name='小强'))
~ 非        如:...filter(~Q(p_age__lte=100))

2、F对象,用来帮助自己属性与自己的属性比较
如:需求:实现年龄比id小的数据
persons=Person.objects.filter(p_age__lt=F('id'))

4、查询结果的切片

格式:结果集[start:stop]  左闭右开
截取从start位置到stop位置的数据

5、聚合函数的使用

注意:1、大小写    2、倒包
Max  最大值
Min  最小值
Avg  平均值
Sum  总和
如:求年龄最大的/最小的
res=Person.objects.all().aggregate(Max('p_age'))
res=Person.objects.all().aggregate(Min('p_age'))
<think>好的,我现在需要帮助用户了解如何在Django框架中集成和设置MySQL数据库。首先,我要回忆一下Django数据库配置步骤。Django默认使用SQLite,但用户想用MySQL,所以需要修改设置文件,通常是settings.py里的DATABASES部分。 接下来,我得考虑用户可能已经安装了Django,但还没有安装MySQL数据库驱动。Django官方推荐使用mysqlclient,所以需要提醒用户安装这个,可以通过pip安装。另外,如果用户遇到安装问题,比如在Windows上可能需要一些依赖库,可能需要给出提示。 然后,配置DATABASES字典,括引擎、数据库名、用户、密码、主机和端口。这部分需要详细说明每个字段的作用,特别是引擎要改为'mysql',而数据库名需要预先在MySQL中创建好,用户是否有权限等问题也需要考虑。 接下来,运行迁移命令,应用Django的默认模型。这里可能需要解释迁移的作用,以及如何通过python manage.py migrate来同步数据库结构。 另外,用户可能需要创建超级用户,所以应该提到createsuperuser命令,并说明其用途。 在开发过程中,可能会遇到时区问题或者字符集的问题,比如MySQL的严格模式。需要提醒用户在OPTIONS中设置init_command来禁用严格模式,或者调整时区设置。这部分可能需要引用一些常见的错误解决方案,比如引用错误处理的相关文档。 还有,测试数据库连接是否成功,可能需要指导用户运行检查命令,比如python manage.py check,或者运行服务器后尝试进行数据库操作,比如在admin界面添加数据。 用户可能还会遇到兼容性问题,比如Django版本与mysqlclient的兼容性,需要确认版本是否匹配。此外,如果使用Django 3.1及以上版本,MySQL 5.7或更高版本是必须的,这点也需要提及。 最后,生成相关问题的时候,要覆盖常见的问题,比如性能优化、迁移问题、备份恢复、与其他数据库的比较以及事务处理等,这样用户可以有进一步的学习方向。 现在需要确保所有步骤清晰,并且涵盖可能遇到的常见问题,同时引用提供的参考资料中的相关部分,比如错误处理的部分可以引用引用[4],数据库API部分可以引用引用[3]。</think>### DjangoMySQL数据库集成配置步骤 --- #### 1. **安装MySQL驱动** Django需要通过`mysqlclient`库连接MySQL。使用以下命令安装: ```bash pip install mysqlclient ``` **注意**:Windows用户可能需要从[这里](https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient)下载预编译的`.whl`文件。 --- #### 2. **创建MySQL数据库** 在MySQL中手动创建数据库: ```sql CREATE DATABASE myproject CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` **说明**:`utf8mb4`支持更广泛的字符集(如Emoji)[^3]。 --- #### 3. **配置Django的`settings.py`** 修改`DATABASES`配置: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myproject', 'USER': 'root', 'PASSWORD': 'your_password', 'HOST': 'localhost', # 或MySQL服务器IP 'PORT': '3306', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", # 启用严格模式[^4] 'charset': 'utf8mb4', }, } } ``` --- #### 4. **应用数据库迁移** 运行以下命令同步模型到MySQL: ```bash python manage.py makemigrations python manage.py migrate ``` **作用**:生成用户表、权限表等Django内置模型。 --- #### 5. **验证配置** 启动Django开发服务器并测试数据库操作: ```bash python manage.py runserver ``` - 访问Admin界面(`/admin/`),添加测试数据。 - 使用`python manage.py dbshell`直接连接MySQL验证数据。 --- #### 6. **常见问题解决** - **时区问题**:在`settings.py`中设置: ```python TIME_ZONE = 'Asia/Shanghai' USE_TZ = True ``` - **权限错误**:确保MySQL用户拥有数据库的完整权限。 - **版本兼容性**:Django 4.1+需要MySQL ≥5.7,确认版本匹配。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值