在django中,数据库的创建一般是在models.py中完成
一.单表操作(在表的创建过程中,不能同时对表进行增删等操作,要等表创建完再执行相关操作)
1.创建表
class AuthorDetail(models.Model): sex = models.BooleanField(max_length=1, choices=((0, '男'),(1, '女'),)) email = models.EmailField() address = models.CharField(max_length=50) birthday = models.DateField() author = models.OneToOneField(Author)
#声明一个类AuthorDetail,表名就是类名的小写。sex,email等是字段名
在class声明完之后,在命令行中输入:1.python manage.py makemigrations 2.python manage.py migrate 然后点击view-toolwindow-database,将db.sqlite3拖入右边窗口
生成如图所示表

2.增(create)(暂且不会同时添加多条数据,要一条一条添加)
#create方式一: Author.objects.create(name='Alvin') #Author是类名,也是表名 #create方式二: Author.objects.create(**{"name":"alex"}) #create()参数如果是字典,前面**,如果是列表,前面*。 #save方式一: author=Author(name="alvin") author.save() #save方式二: author=Author() author.name="alvin" author.save()
3.删(delete)
Book.objects.filter(id=1).delete() #filter是遍历,找到id为1的行并删除
4.改(update和save)
models.Book.objects.filter(id=3).update(title="PHP") #只能用filter,不能用get
obj=models.Book.objects.get(id=3) #此处只能用get,不然无法调用save方法 obj.title="Python" obj.save()
5.查
# <1>filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 # <2>all(): 查询所有结果
二.一对多操作
1.表的创建
#创建两张表Author/Book
#在Author表中添加外键,外键是在多的表中添加的(一本书可以由多个作者书写)。
class Author(models.Model): name=models.CharField(max_length=50) book=models.ForeignKey("Book",on_delete=models.CASCADE) #Book表在Author表下创建,要写成"Book"。这句话的意思:book_id字段(自动生成)绑定Book表中的id class Book(models.Model): address=models.CharField(max_length=50)


2.增
# # Author.objects.create(name="ww1",book_id=4) #book_id=4也就是找Book表中id=4的行(首先Book中得要有id=4的值) # # Book.objects.create(address="cha") #必须是这句代码执行完才能执行上面一行代码
3.查


class Author(models.Model):
name=models.CharField(max_length=29)
book=models.ForeignKey(to="Book")
class Book(models.Model):
address=models.CharField(max_length=20)
#正向查询(由book_id所在表查询另一张表)
autor=Author.objects.get(id=4) #从Author表中得到id=4的一行,用变量autor存储 print(autor.book_id) #得到变量autor的book_id #book_id=2 print(autor.book.address) #这个book是Author表中的book 通过autor.book.address获取Book表中的字段
#反向查询()
cls=Book.objects.get(id=1) #Book表中id=1的在Author表中对应id=1,2的两行
cls.author_set.all()
三.多对多
1.表的创建
#一个学生可以在多个班级上课,一个班级可以有多个学生 class Stuent(models.Model): name=models.CharField(max_length=50) clas=models.ManyToManyField("Class") #自动创建一个新表(中间表) class Class(models.Model): name=models.CharField(max_length=50)
以上定义了两个类,明面上是创建了两个新表,实际上是创建了三个表(因为有ManyToManyFiled)

对待自动创建的表无法直接对第三张表操作 obj = Student.objects.get(id=1) obj.name # 对第三张表操作 #添加 obj.clas.add(1) #对第三张表添加student_id=1,class_id=1 obj.clas.add(2,3) #对第三张表添加student_id=1,class_id=2;student_id=1,class_id=3 obj.clas.add(*[1,2,3]) #对第三张表添加student_id=1,class_id=1;student_id=1,class_id=2;student_id=1,class_id=3 #删除 obj.clas.remove(1) obj.clas.remove(2,3) obj.clas.remove(*[1,2,3]) obj.clas.clear() #更新 obj.name = 'new_name' obj.save() obj.clas.set([1,2,3])
#查询
obj.stu.all() #这是对另一张表的所有遍历
for i in obj.stu.all():
print(i.name)
#print(i.value("name"))
表的创建方式二(自己创建第三张表)
class Stuent(models.Model): name=models.CharField(max_length=50) class Class(models.Model): name=models.CharField(max_length=50)
class Student_Class(models.Model):
s=models.ForeignKey(Student) #s在表中自我生成s_id,和Student表中的id绑定
c=models.ForeignKey(Class) #c在表中自我生成c_id,和Student表中的id绑定
对其操作就如同一对多中操作
class UserInfo(models.Model): # 用户信息表
username = models.CharField(max_length=32) # 用户名
phone = models.CharField(max_length=22) # 手机号
password = models.CharField(max_length=32) # 密码
def __str__(self):
return self.phone+self.password
如果 models.UserInfo.objects.all() //查询到的就是__str__返回的内容
多对多操作:https://blog.youkuaiyun.com/shangliuyan/article/details/7920037