--------------------------------------------------------------------------------------------------------------------------
【Django使用数据库是自带ORM的】1.你配置好了数据库 那就可以使用 自带ORM的不需要原生的操作。
2.Django 操作数据库简单
3.直接使用模型就操作数据库了 很暴力的
--------------------------------------------------------------------------------------------------------------------------
setting.py里的DATABASES
修改上述的配置 变成你的配置信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #以mysql为例子
'NAME': 'django', #生成的数据库名字
#'NAME' 你要操作的数据库名字 注意不要和数据库已有的重名 自己手动创建数据库django在mysql
'USER':'cesto', #数据库账户
'PASSWORD':'密码', #数据库密码
'HOST':'localhost'
'PORT':'3306',
}
}
2.【写第一个模型Model】
1.在APP的models.py文件里
2.引入头文件
from django.db import models
3.创建自定义Model类基础Model类class MyModel(models.Model):
# 字符串CharField类型 title 长度100
title = models.CharField(max_length = 100)
# URL类型 url
url = models.URLField()
author = models.CharField(max_length = 100)
age = models.IntegerField()
3. 【模型同步数据库】 ***版本差异的区分 【操蛋 版本不一样 没法玩啊】
shell 输入命令 >python manage.py -hType 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[新的版本]
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
[django]
cleanup
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
reset
runfcgi
runserver
shell
sql
sqlall
sqlclear
sqlcustom
sqlflush
sqlindexes
sqlinitialdata
sqlreset
sqlsequencereset
startapp
startproject
syncdb
test
testserver
validate
---------------------------------------------------------------------------------------------------------------------
可以看到 命令差别很大的 注意区分版本和操作。
---------------------------------------------------------------------------------------------------------------------
【Django版本冲突 和 同步数据库】
1. 验证模型是否有效,如果我没说错,
如果你是旧版本执行python manage.py validate [这是旧版本]
《显然0 error即OK
如果你是新版本 :执行python manage.py check [新版本]
《显示 System check identified no issues (0 silenced). 即OK
2.生成sql语句 和 提交sql语句到数据库
如果你是旧版本
执行python manage.py sqlall APP项目名字 《查看SQL
执行python manage.pysyncdb 《提交SQL
如果你是新版本 :【3个步骤】
1. python manage.py makemigrations 项目名字 #用来检测数据库变更和生成数据库迁移文件
2. python manage.py migrate #用来迁移数据库
3. python manage.py sqlmigrate 项目名字 0001 # 用来把数据库迁移文件转换成数据库语言
在命令行依次执行完这三个命令你就可以进行数据访问了。
---------------------------------------------------------------------------------------------------------------------
【延伸 如果修改Model必须再依次执行以上几个步骤。重新同步到数据库】
---------------------------------------------------------------------------------------------------------------------
4.【操作数据库 python manage.py shell】
如果Model成功的创建到了数据库
1.进入shell
python manage.py shell
2.[操作数据库]导入你要操作的Model
from demo.models import *
【 查询】
查询全部:
MyModel.objects.all()
返回一个list对象 []
查询个别:
MyModel.objects.all()[0:2] 前两个
但是本质还是SQL查询了全部 你截取了前两个2个罢了。
查询单个:
MyModel.objects.get(条件) 返回一个对象
m = MyModel(title="Django",url="www.xx.com",author="谢杰",age=10)
m.save() #保存model对象
此时查询
r = MyModel.objects.all()
r[0].title #输出Django 对了
条件查询:
r = MyModel.objects.get(age=10)
r.title #输出Django 对了
【 更新】
1.查询单个:
r = MyModel.objects.get(age=10)
2.修改这个:
r.title="更新"
r.save() #保存这个新的对象更新
【排序 order_by】
# 按照age升序排序
r = MyModel.objects.all().order_by("age")
遍历查看
for x in r:
print(x.title)
# 按照age将降序排序 加 - 即可
r = MyModel.objects.all().order_by("-age")
遍历查看
for x in r:
print(x.title)
【我们也可以在Model内部设计排序】
加入
class Meta:
ordering=['age']
【删除】
1.查询单个:
r = MyModel.objects.get(age=10)
2.再删除这个对象
r.delete()