能否不开发Web应用,仅通过Django ORM操作MySQL数据库?
别担心,你完全不需要搭建网站或者Web应用,就能用Django ORM来操作MySQL——毕竟ORM本身就是独立于Django Web服务的数据库操作工具,只是大家常把它和Web开发绑定在一起而已。结合你的学习目标(用Python+Django来掌握MySQL),这种方式反而非常适合你。
下面是具体的操作步骤,结合你已经配置好的环境(Ubuntu14.04、Python3.4、MySQL+Django连接正常)来梳理:
步骤1:确认项目配置(你已经完成大半,快速核对)
- 确保
settings.py里的DATABASES配置已经正确指向MySQL,且之前测试连接正常; - 准备好一个用来存放模型的Django应用(如果还没创建,看下一步)。
步骤2:创建一个Django应用(用来放数据库模型)
虽然不用Web功能,但Django要求模型必须放在应用目录下。在你的项目根目录运行:
python manage.py startapp mydbapp
然后把mydbapp添加到settings.py的INSTALLED_APPS列表里:
INSTALLED_APPS = [ # 保留Django自带的应用,比如'django.contrib.admin'等 'mydbapp', # 新增这一行 ]
步骤3:定义模型(对应MySQL的表结构)
在mydbapp/models.py里编写模型类,这就是你用Python描述MySQL表结构的方式,不用手动写CREATE TABLE语句。举个简单例子:
from django.db import models class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) publish_date = models.DateField() price = models.DecimalField(max_digits=5, decimal_places=2) def __str__(self): return self.title
这个模型会对应MySQL里的mydbapp_book表,每个字段对应表的列——Django会帮你处理字段类型、约束这些细节。
步骤4:生成并应用迁移(创建/修改MySQL表)
这一步就是Django帮你把模型转化为MySQL的表操作,代替手动写SQL的CREATE或ALTER语句:
# 生成迁移文件(记录模型的变化) python manage.py makemigrations # 应用迁移到MySQL(实际创建/修改表) python manage.py migrate
运行完后,你可以登录MySQL客户端查看,对应的表已经自动创建好了。如果想看看迁移背后对应的SQL语句,可以用:
python manage.py sqlmigrate mydbapp 0001
(把0001换成你的迁移文件编号)
步骤5:用Django Shell操作数据库(增删改查全用Python)
现在就可以完全脱离Web,只用Python代码通过ORM操作MySQL了。打开Django shell:
python manage.py shell
在shell里尝试这些操作:
新增数据(对应SQL的INSERT)
from mydbapp.models import Book # 方式1:创建对象后保存 book1 = Book(title="Python入门", author="张三", publish_date="2023-01-01", price=29.9) book1.save() # 方式2:一步创建并保存 book2 = Book.objects.create(title="Django实战", author="李四", publish_date="2023-05-01", price=59.9)
查询数据(对应SQL的SELECT)
# 查询所有书籍 all_books = Book.objects.all() for book in all_books: print(book.title, book.author) # 按条件查询(比如找作者是张三的书) zhang_books = Book.objects.filter(author="张三") # 获取单个对象(唯一匹配) django_book = Book.objects.get(title="Django实战") # 查看ORM对应的SQL语句(帮你理解底层逻辑) print(zhang_books.query)
修改数据(对应SQL的UPDATE)
django_book.price = 54.9 django_book.save()
删除数据(对应SQL的DELETE)
book1.delete()
为什么这适合你的学习目标?
你想通过Python和Django来掌握MySQL,这种方式刚好能帮你建立两者的对应关系:
- 写模型、做迁移时,你可以对比生成的SQL,理解ORM如何把Python代码转化为MySQL的表操作;
- 用ORM做查询时,通过
query属性查看对应的SQL,能直观感受到Python逻辑和MySQL语句的关联; - 全程不用碰Web开发的内容,完全专注于数据库操作和Python代码,完美匹配你“不开发应用,只练MySQL+Django ORM”的需求。
内容的提问来源于stack exchange,提问作者just_learning

