数据库的操作:
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