在setting.py文件中注释默认的DATABASES,将其修改为如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_orm',#数据库名 'HOST':'127.0.0.1',#ip地址(这里用本地测试) 'PORT':'3306',#端口默认3306 'USER':"自己的",#用户名 'PASSWORD':"自己的",#密码 } }
然后再项目文件夹下的_init_.py文件中加入:
import pymysql pymysql.install_as_MySQLdb()
就可以使用mysql数据库了
接着就在models.py文件中:
在orm中一张表对应一个类 例如:
class Book(models.Model): #相当于表名 name=models.CharField(max_length=20,verbose_name="姓名") #字段,取别名在admin上显示,max_length字符长度20个字 price=models.IntegerField(verbose_name="价格") pub_data=models.DateField(verbose_name="日期") author=models.CharField(max_length=32) publish=models.ForeignKey("publish",'on_delete=models.CASCADE,') #与publish表创建外键 authors=models.ManyToManyField("Author") def __str__(self): return self.name
class author1(models.Model): name=models.CharField(max_length=32) class publish(models.Model): name=models.CharField(max_length=32) city=models.CharField(max_length=32) def __str__(self): return self.name class Author(models.Model): name=models.CharField(max_length=32) age=models.IntegerField() def __str__(self): return self.name
book就是一张表,name 、price这些就是字段
这里有两个特殊字段
publish:这是一个外键,用来连接另一张表,其中publish(字段)就是表publish的一个对象(可以这样理解),在filter以及values中查询要用双下划綫__
authors:用来多对多的表的连接,ManyToManyField会自动生成第三张表。
一些主要的查询操作如下:
# book_list=Book.objects.all() #book_list=Book.objects.all()[0:3] #切片处理 #book_list=Book.objects.all().values("author").distinct() # distinct()去重 #book_list=Book.objects.filter(price__gt=50).values("name","author","price") #price__gt=50查找price大于50的记录,显示名字与价格 #book_list=Book.objects.filter(name__icontains="p").values("name","author","price") #name__icontains(不区分大小写)查找书名以p开头的书, #book_list=Book.objects.exclude(name__icontains="p").values("name","author","price") # exclude查找除了 name__icontains(不区分大小写)查找书名以p开头以外的书, # pub_obj=publish.objects.filter(name="人民出版社")[0] #对表publish取'人民出版社'这条数据 # book_list=pub_obj.book_set.all() #采用(小写类名book)book_set.all()对表book,返回"人民出版社"的所有书籍的对象集合(表publish没有外键,反向查找) #book_list=Book.objects.filter(publish__name="新华出版社").all()#采用__双下划线,publish外键名__name(属性) #book_list=publish.objects.filter(book__name="python").all()#采用__双下划线,publish表没有外键,所以用book表(book__name),而上面的book表有外键publish,所以用外键 #book_list=Book.objects.filter(publish__city="东莞").all() #avg=Book.objects.all().aggregate(a=Avg("price"))#用聚合函数做平均值aggregate(Avg("price")),a是自己起的名字 #avgs=Book.objects.values("authors__name").annotate(Sum("price"))#按作者的名字进行分组 #aaa=publish.objects.values("name").annotate(Min("book__price")) #book_list=Book.objects.filter(Q(price=118)|Q(name="python")).all()#查找价格为118或者书名为python的的书的所有信息 #book_list=Book.objects.filter(~Q(price=118)).all()#查找除了价格为118以外的书的所有信息 #book_list=Book.objects.filter(Q(name__contains="p")).all()#查找p开头的所有书的所有信息 book_list=Book.objects.filter(Q(name__contains="p"),price=109).all()#查找p开头的所有书,然后价格为109的所有信息