poll教程第二节
配置
mysite/settings
DATABASE{} engine 用哪种数据库 name 数据存储文件名
其他需要关注的配置:
INSTALLED_APPS django数据库迁移时会检查installed apps中的应用涉及到的类,根据类生成sql。如果模块应用未添加到此配置,那么模块下models.py中定义的类不会生成表。
TIME_ZONE USE_TZ 保持默认
迁移migrate数据库
1.setting.py INSTALLED_APP 插上应用
2.
python manage.py makemigrations polls
根据模块下models.py生成迁移脚本
3.(选做)python manage.py sqlmigration polls 0001 查看sql语句
4.
python manage.py migrate
执行迁移脚本
shell
python manage.py shell
与一般的python交互式解释器,还包含django上下文环境,拥有django相关功能。
orm 操作
1.查询表中所有数据
Question.objects.all() 返回model对应table的所有行
2.插入数据 默认自动提交。
q = Question()
q.save
3.带条件查询
类.objects.filter(列 = 值,列2=值2)
4.模糊匹配 字段后跟表示特殊操作__开头
类.objects.filter(字段__startswith=‘匹配字串’)
5.查询除了filter,也可以get,功能一致
类.objects.get(列=值)
get查询不到报异常 (推荐)filter查询不到返回空结果集
filter返回Queryset及如果集 get返回Question实例
6.类实例相当于表中一行数据,可以调用示例方法
q = Question.objects.get(id=1)
q.放法()
7.反向查询
需求,查询question表中“下周五考试嘛”这个问题对应 的选项,如果是sql,要先select id from question 表 where text =“下周”得到qid,再select*from choice where question_id=qid:
而orm帮我们只需要 q.关联_set.all()。优点省一条查询代码缺点不太好理解。
8.一对多的关系
先把一的一方的表的一行数据get出来,q = Question.objects.get(id=1) 然后反向查询关联创建q.choice_set.create(choice_text=’’)
9. 删除
q = Question.objects.get(id=1)
q.delete()
更多查询语法参考
官方中文文档https://docs.djangoproject.com/zh-hans/2.0/
或百度
注意:orm 框架并非万能,较复杂的数据结构可能报错。可以手动在数据库简历表,不走migrete,只要保证models.py中的定义字段属性与数据库表一致。