一、ORM
映射关系
表名<----------->类名
字段<------------>属性
表记录<—------>类实例对象
二、创建表(建立模型)
在创建表之前的准备工作:
第一步:在创建表之前,首先应该在MySQL中创建一个数据库。
第二步:在setting配置文件中进行数据库连接的相关配置。
即修改Django默认的数据库的sqlist3为MySQL
第三步:早App01——Init文件中导入pyMySQL,再写上一句 pymysql.install_as_MySQLdb()
第四步:创建数据库表的执行命令(需要记住两条命令)
Python manage.py makemigrations 创建脚本
python manage.py migrate 迁移
三、添加表记录
添加表记录的方式有两种
方式一:
book_obj=models.Book(title=title,author=author,publishDate=pubDate,price=price)
book_obj.save()
方式二:
book_obj=models.Book.objects.create(title=title,publishDate=publishDate,price=price)
四、查看表记录
1.先在视图函数view中将数据取出来
from app01 import models #app01是应用名 def index(request): # 从数据库取出所有书籍对象 bookList=models.Book.objects.all() # [bookObj1,.....] return render(request,"index.html",{"bookList":bookList})
查询相关:all 查询所有结果
filter 查询所给筛选条件相匹配的对象
2.在template模板中接收
{% for book_obj in bookList %}
<tr> <td>{
{ book_obj.nid }}</td>{ { book_obj.title }} { { book_obj.publishDate|date:"Y-m-d" }} { { book_obj.price }} {% endfor %} 五、查询表记录 1.查询相关的API 1.all 查询所有结果 2.filter(**kwargs)它包含了与所给筛选条件相匹配的对象,即过滤 3.get(**kwargs) 返回与所给筛选条件相匹配的对象,返回结果有且只有一个。如果符合筛选条件的对象超过一个或没有都会抛出错误,拿到的是一个modle对象,区别于filter 4.exclude(**kwargs)它包含了与所给筛选条件不匹配的对象,即除过筛选对象外的所有记录 5.values(field) 返回一个valueQueryset——一个特殊的Queryset,运行后得到的并不是一系列modle的实例化对象,而是一个可迭代的字典序列 6.values_list(field)它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 7.order_by(*field)对查询的结果排序 8.reverse() 对查询结果反向排序 9.distinct() 从返回结果中剔除重复记录 10.count() 返回数据库中匹配查询(Queryset)的对象的数量 11.first() 返回第一条记录 12.last() 返回最后一条记录 13.exists() 如果Qureyset包含数据,则返回true,否则返回false 注意:一定要区分modle对象和Qureyset对象 modle对象可以调用他下面所有的属性方法,可以用.的形式调用属性,Queryset得到的是一个集合。 2.双下划线之单标查询 modle.Tb1.objects.filter(id_it=10,it_gt=1) 获取id大于1且小于10的值 modle.Tb1.objects.filter(id_in=[11,22,33]) 获取id等于11,22,33的数据 modle.Tb1.objects.exclude(id_in=[11,22,33]) not in modle.Tb1.objects.filter(name_contains="ven") modle.Tb1.objects.filter(name_icontains="ven") icontains大小写不敏感 modle.Tb1.objects.filter(id_range=[1,2]) 范围bettwen and startswith,istartswith,endwish,iendwish 六、删除表记录 删除方法就是delete()。它运行时立即删除对象而不返回任何值。 比如我们给表中添加一个删除按钮来实现点击按钮后数据库每条记录的删除 1.template模板
{% for book_obj in bookList %} { { book_obj.nid }} { { book_obj.title }} { { book_obj.author }} { { book_obj.publishDate|date:"Y-m-d" }} { { book_obj.price }} {% endfor %} 2.url并发
urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index), url(r'^del/(\d+)', views.delBook), ] 3.试图函数view实现删除
def delBook(request,id): models.Book.objects.filter(nid=id).delete() return redirect("/index/")