博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django数据库操作
阅读量:4588 次
发布时间:2019-06-09

本文共 3778 字,大约阅读时间需要 12 分钟。

数据库的操作:

1.简单的操作数据库:

  在调用数据库mysql是,有的需要在project的app下__init__.py添加:

    import  pymysql

    pymysql.install_as_MySQLdb()

 

  在定义字段时,如果没有指定null=True,默认情况下 null=False ,即非空

 

创建数据库:    class Book(models.Model):        id = models.AutoField(primary_key=True)        author = models.CharField(max_length=100,null=False)        price = models.FloatField(default=0)添加数据:    1.book = Book(name='西游记', author='吴承恩', price=100)   2.book_dic = {'name'='三国演义', 'author'='罗贯中','price'=100}     Book.object.create(**book_dic) 查询数据:pk --> primary key    1.book = Book.objects.get(pk=2)    2.book = Book.objects.filter(name='三国演义')删除数据:     book.delete()修改数据:    book.price = 200在增删改查操作中,最后需要保存,即 book.save()

 

 

 

 

2.模块常用属性

 

AutoField:    映射到数据库是int类型,可以有自动增长的特性,一般不需要使用这个类型,    不指定主键,那么模型会自动的生成一个叫id的自动增长的主键    如果想指定一个其他名字的并且具有自动增长的主键,也可使用BigButoField:    64位整形,自增长BooleanField: 布尔值类型   在模块层面接收的是True/False,在数据库层面是tinyint类型
NullBooleanField:   可以为空的布尔值
CharField: (max_length):   在数据库层面是varchar类型,在python层面就是普通的字符串,需要指定最大长度,即必须传递max_length参数值

 EmailFiled:

   邮箱,默认大小为254
   可输入其他字符串格式,主要用处在前端提交表单
 FlotField:
   浮点类型,映射到数据库类型float
 TextField:
   映射到数据库类型是longtext,用于文章类存储
 DateField:
   日期类型,映射到数据库是date类型
   参数:
      auto_now_add:是在第一次添加数据进去的时会自动获取当前时间
      auto_now:每次这个对象调用save方法的时候都会将当前时间更新
 DateTimeField:
   日期时间类型,不仅可以存储日期,还可以存储时间,映射到数据库是datetime类型
   可使用auto_now_add, auto_now参数
 TimeField:
   时间类型,在数据库中time类型

 3.外键和表的关系

  表名的设置:

在创建表名时,Django默认是表名格式为 app名_表名如果需要重定义表名,则重写Meta模块class Classes(models.Model):    id = models.AutoField(primary_key=True)    class Meta:         db_table = 'Classes'

 

 两张表的关联操作

  创建表

book/model.py class Category(models.Model):    name = models.CharField(max_length=100)class Article(models.Model):    title = models.CharField(max_length=100)    content = models.TextField()    category = models.ForeignKey("Category",on_delete=models.CASCADE)  #on_delete是设置两张表的级别,CASCADE为级别关联    (同app下的设置外键)    autor = models.ForeignKey("front.Front",on_delete=models.CASCADE,null=True)                      #对front下的Front表设置外键

创建另一个app下的表

 

front/model.pyclass Front(models.Model):    username = models.CharField(max_length=100)

 

1.添加表数据

book/views.py def index(request):    article = Article(title='abc',content='111')    category = Category(name='最新文章')    category.save()    article.category = category    article.save()    return HttpResponse("seccess")

 添加数据后的

2.另一种添加表数据:

def one_to_many_view(request):    category = Category.objects.first()    article = Article(title='大神片', content='没得看')    article.author = Front.objects.first()    category.articles.add(article,bulk=False)      #bulk的作用在于:自动保存数据库article,category    return HttpResponse("success")

两种方式的不同之处在于,第一种是通过article调用添加,第二种是category调用添加 

 

 对自身的外键引用

book/model.py class Conment(models.Model):    content = models.TextField()    origin_comment = models.ForeignKey('self',on_delete=models.CASCADE)    #或者:origin_comment = models.ForeignKey('Conment',on_delete=models.CASCADE)

 

 4.一对多关系表操作:

在Django中,假设存在 A表,B表,其中A表被B表引用并设置外键   即:A:id、username         B:id、concent、author_id(外键A中id)   Django会在A模型中创建一个以B_set()的函数

实例操作:

model.pyclass Category(models.Model):    name = models.CharField(max_length=100)class Article(models.Model):    title = models.CharField(max_length=100)    content = models.TextField()   #可以修改article_set():category = models.ForeignKey("Category",on_delete=models.CASCADE,related_name='articles')    category = models.ForeignKey("Category",on_delete=models.CASCADE) views.py:#获取某个分类下所有的文章def index(request):    category = Category.objects.first()    article = category.article_set.first()  #article_set可以被修改    print(article.title)    return HttpResponse("success") 结果:三国演义

表内容如下

 

Django的常用DRM查询:

参考:https://blog.csdn.net/qq_34493908/article/details/81352784

 

转载于:https://www.cnblogs.com/tang-s/p/9650060.html

你可能感兴趣的文章
认识了个外国友人!
查看>>
对Cookie进行增删改查
查看>>
MySQL sql语句获取当前日期|时间|时间戳
查看>>
微信支付官方SDK V3 .NET版的坑
查看>>
Python(一)list tuple dict set
查看>>
什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁
查看>>
hdu4651(广义五边形数 & 分割函数1)
查看>>
python iter,迭代器&dict,字典详解
查看>>
python笔记1
查看>>
C语言:自定义一个查找字串的功能函数,类似于<string.h>中的strstr()
查看>>
数据库联系 创建表格:重点
查看>>
Regist
查看>>
设置磁盘配额(第二版)
查看>>
C++ 获取字符串中的所有汉字
查看>>
js 滚动到指定位置(带step 速度)
查看>>
项目初尝试——α迭代感想
查看>>
dgraph实现基本操作
查看>>
[Arduino] 基于Xbee Pro和网络技术的智能公交系统设计
查看>>
My97DatePicker日历控件配置
查看>>
HDU 3586-Information Disturbing(树形dp)
查看>>