Django数据库操作

数据库的操作:

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.py
class 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.py
class 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