1. 程式人生 > >django數據庫

django數據庫

設定 pre span itl date imp dbo inf set

時間的設定
from django.db import models import django.utils.timezone as timezone class Doc(models.Model): add_date = models.DateTimeField(‘保存日期‘,default = timezone.now) mod_date = models.DateTimeField(‘最後修改日期‘, auto_now = True

html頁面從數據庫中讀出DateTimeField字段時,顯示的時間格式和數據庫中存放的格式不一致,比如數據庫字段內容為2016-06-03 13:00:00,但是頁面顯示的卻是Apr. 03, 2016, 1 p.m.

為了頁面和數據庫中顯示一致,需要在頁面格式化時間,需要添加<td>{{ infor.updatetime|date:"Y-m-d H:i:s" }}</td> 類似的過濾器。刷新頁面,即可正常顯示。



from django.db import models
from datetime import datetime
import django.utils.timezone as timezone
# Create your models here.


# 1: 簡單用戶表 tb_user:
# id , username,userpaw
class user(models.Model):

user_name = models.CharField(max_length=20)
user_paw = models.CharField(max_length=20)
def __str__(self):
return (self.user_name, self.user_paw)


# 2: 用戶詳細信息表 tb_userinfo
# id,userid , email , homepage , phone , address ...

class user_info(models.Model):
user_id = models.ForeignKey("user", on_delete=models.CASCADE)

email = models.CharField(max_length=30)
phone = models.CharField(max_length=16)
sex = models.CharField(max_length=5)
def __str__(self):
return (self.user_id, self.email, self.phone, self.sex)



# 3: 論壇主題表 tb_bbs
# id , userid , title , ip , count ,create_time, up
class bbs(models.Model):
user_id = models.ForeignKey("user",on_delete=models.CASCADE)
title = models.CharField(max_length=50)
create_time = models.DateTimeField()
count = models.IntegerField(default=timezone.now)
up = models.IntegerField()
def __str__(self):
return (self.user_id, self.title, self.create_time, self.count, self.up)


# 4: 論壇內容標 tb_bbs_content (此表可按照bbsid進行分表存儲)
# id,bbsid , content;
class bbs_content(models.Model):
bbs_id = models.ForeignKey("bbs", on_delete=models.CASCADE)
content = models.CharField(max_length=200)
def __str__(self):
return (self.bbs_id, self.content)


# 5: 論壇回復表 tb_bbs_reply (此表可按照bb_sid進行分表存儲)
# id , bbs_id , user_id , content , time , ip
class bbs_reply(models.Model):
bbs_id = models.ForeignKey("bbs", on_delete=models.CASCADE)
user_id = models.ForeignKey("User", on_delete=models.CASCADE)
content = models.CharField(max_length=150)
time = models.DateTimeField(default=timezone.now)
def __str__(self):
return (self.bbs_id, self.user_id, self.content, self.time)



表操作

表記錄的添加

方式一:
Book()
b=Book(name="python基礎",price=99,author="yuan",pub_date="2017-12-12")
b.save()
方式二:
Book.objects.create()
Book.objects.create(name="老男孩linux",price=78,author="oldboy",pub_date="2016-12-12")


表記錄的修改
方式一:

b=Book.objects.get(author="oldboy")
b.price=120
b.save()

方式二:
#update是QuerySet
Book.objects.filter(author="yuan").update(price=999)

表記錄的刪除:
Book.objects.filter(author="oldboy").delete()

表記錄的查詢(重點):

book_list = Book.objects.filter(id=2)
book_list=Book.objects.exclude(author="yuan").values("name","price")

book_list=Book.objects.all()
book_list = Book.objects.all()[::2]
book_list = Book.objects.all()[::-1]

#first,last,get取到的是一個實例對象,並非一個QuerySet的集合對象
book_list = Book.objects.first()
book_list = Book.objects.last()
book_list = Book.objects.get(id=2)#只能取出一條記錄時才不報錯


ret1=Book.objects.filter(author="oldboy").values("name")
ret2=Book.objects.filter(author="yuan").values_list("name","price")

book_list= Book.objects.all().values("name").distinct()
book_count= Book.objects.all().values("name").distinct().count()


模糊查詢 雙下劃線__

book_list=Book.objects.filter(name__icontains="P").values_list("name","price")
book_list=Book.objects.filter(id__gt=5).values_list("name","price")


多表操作(一對多):
#添加記錄
#publish_id=2
Book.objects.create(name="linux運維",price=77,pub_date="2017-12-12",publish_id=2)

#publish=object
Book.objects.create(name="GO",price=23,pub_date="2017-05-12",publish=publish_obj)

#查詢記錄(通過對象)

正向查詢:
book_obj=Book.objects.get(name="python")
pub_obj=book_obj.publish----》書籍對象對應的出版社對象
pub_obj.name
反向查詢:
pub_obj = Publish.objects.filter(name="人民出版社")[0]
pub_obj.book_set.all().values("name","price")

#查詢記錄(filter values 雙下劃線__)

#人民出版社出版過的書籍與價格
ret=Book.objects.filter(publish__name="人民出版社").values("name","price")

#python這本書出版社的名字
ret2=Publish.objects.filter(book__name="python").values("name")

#python這本書出版社的名字
ret3=Book.objects.filter(name="python").values("publish__name")

#北京的出版社出版書的名字
ret4=Book.objects.filter(publish__city="北京").values("name")

#2017年上半年出版過書的出版社的名字
ret5=Book.objects.filter(pub_date__lt="2017-07-01",pub_date__gt="2017-01-01").values("publish__name")


多表操作(多對多):

創建多對多的關系 author= models.ManyToManyField("Author")(推薦)


書籍對象它的所有關聯作者 obj=book_obj.authors.all()
綁定多對多的關系 obj.add(*QuerySet)
obj.remove(author_obj)


如果想向第三張表插入值的方式綁定關系: 手動創建第三張表

# class Book_Author(models.Model):
# book=models.ForeignKey("Book")
# author=models.ForeignKey("Author")
Book_Author.objects.create(book_id=2,author_id=3)


掌握:通過 filter values (雙下換線)進行多對多的關聯查詢(形式和一對多)



django數據庫