pythonWeb -- Django开发- 模型Model 和 数据库的操作



--------------------------------------------------------------------------------------------------------------------------

【Django使用数据库是自带ORM的】
  1.你配置好了数据库 那就可以使用 自带ORM的不需要原生的操作。
  2.Django 操作数据库简单 
  3.直接使用模型就操作数据库了 很暴力的

--------------------------------------------------------------------------------------------------------------------------


1.配置数据库信息   **注意Django版本差异
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   -h
Type '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


[旧的版本 1.7.5]
[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()







发布了88 篇原创文章 · 获赞 19 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览