日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)

發(fā)布時間:2023/12/15 数据库 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

數(shù)據(jù)庫操作

dbfirst:數(shù)據(jù)庫優(yōu)先

codefirst(ORM):代碼優(yōu)先,sqlalchemy和DJango都是用的這種

創(chuàng)建表

a.在app下的models.py中,創(chuàng)建類

from django.db import models

class UserInfo(models.Model):

#django會默認(rèn)為我們生成一個自增且是主鍵的id列

uid = models.AutoField(primary_key=True)  #當(dāng)然也可以自己寫,必須要這樣寫

username = models.CharField(max_length=32)  # 用戶名列,字符串類型,指定長度

password = models.CharField(max_length=64)

b.注冊app(在settings下的INSTALLED_APPS中將app的名字添加進(jìn)路徑)

INSTALLED_APPS = [

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'app01',

]

c.執(zhí)行命令

python manage.py makemigrations

python manage.py migrate

Django連接mysql

Django默認(rèn)使用MySQLdb模塊鏈接MySQL但MySQLdb只支持到python2.7,所以要進(jìn)行以下操作

settings.py

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.mysql',

'NAME':'dbname',

'USER': 'root',

'PASSWORD': 'xxx',

'HOST': '',

'PORT': '',

}

}

如下設(shè)置放置的與project同名的配置的__init__.py文件中

import pymysql

pymysql.install_as_MySQLdb()

字段

字符串類型

數(shù)字類型

時間類型

二進(jìn)制類型

字段的參數(shù)

a.數(shù)據(jù)庫部分

null 數(shù)據(jù)庫中字段是否可以為空

email = models.CharField(max_length=60,null=True)

db_column 數(shù)據(jù)庫中字段的列名

email = models.CharField(max_length=60,db_column='e-mail')

default 數(shù)據(jù)庫中字段的默認(rèn)值

email = models.CharField(max_length=60,default='alex3714@163.com')

primary_key 數(shù)據(jù)庫中字段是否為主鍵

uid = models.AutoField(primary_key=True)#AutoField 自增

db_index 數(shù)據(jù)庫中字段是否可以建立索引

unique 數(shù)據(jù)庫中字段是否可以建立唯一索引

unique_for_date 數(shù)據(jù)庫中字段【日期】部分是否可以建立唯一索引

unique_for_month 數(shù)據(jù)庫中字段【月】部分是否可以建立唯一索引

unique_for_year 數(shù)據(jù)庫中字段【年】部分是否可以建立唯一索引

auto_now       創(chuàng)建時自動生成當(dāng)前時間

uptime = models.DateTimeField(auto_now=True, null=True)

auto_now_add     更新時,自動更新為當(dāng)前時間

ctime = models.DateTimeField(auto_now_add=True, null=True)

obj = UserGroup.objects.filter(id=1).update(caption='CEO')  #使用這種方式更新時不能記錄

obj = UserGroup.objects.filter(id=1).first()

obj.caption = "CEO"

obj.save()

b.admin/modelform部分

verbose_name Admin中顯示的字段名稱

blank Admin中是否允許用戶輸入為空

editable Admin中是否可以編輯

help_text Admin中該字段的提示信息

choices Admin中顯示選擇框的內(nèi)容,用不變動的數(shù)據(jù)放在內(nèi)存中從而避免跨表操作

如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)

error_messages 先pass,自定義錯誤信息(字典類型),從而定制想要顯示的錯誤信息;

字典鍵:null, blank, invalid, invalid_choice, unique, and unique_for_date

如:{'null': "不能為空.", 'invalid': '格式錯誤'}

validators pass

#小tips:數(shù)據(jù)庫中的EmailField,URLFiled等是給admin用的

1 from django.db importmodels2

3 #Create your models here.

4

5 classUserInfo(models.Model):6 username = models.CharField(max_length=32, verbose_name='用戶名') #用戶名列,字符串類型,指定長度

7 password = models.CharField(max_length=60, help_text='pwd')8 email = models.CharField(max_length=60,null=True,blank=True)9 test = models.EmailField(max_length=19, null=True)10 text = models.CharField(max_length=20,null=True,editable=False)

View Code

2、根據(jù)類對數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行各種操作

對數(shù)據(jù)庫的增、刪、改、查

views.py

from cmdb import models

def orm(request):

#增,建議用前兩種

models.UserInfo.objects.create(username='root',password='123')

dic={'username':'alex','password':'321'}

models.UserInfo.objects.create(**dic)

obj = models.UserInfo(username='x54256',password='666')

obj.save()

#查,filter<==>where查詢條件

result = models.UserInfo.objects.all() #拿到所有的

#Query[obj1(uid,username,password),obj2(uid,username,password),obj3(uid,username,password)]

for i in result:

print(i.uid,i.username,i.password)

result = models.UserInfo.objects.filter(username='root')

for item in result:

print(item.uid,item.username,item.password)

#小tips:result.query==>查看當(dāng)前sql語句

result = models.UserInfo.objects.filter(username='root',password='123').first()  #直接取得就是Query對象

print(result.uid,...)

#刪

models.UserInfo.objects.filter(username='root').delete()

#改

models.UserInfo.objects.filter(id=3).update(password=147)

return HttpResponse('abc')

5種查詢方法(元組,字典方法)

v1 = models.Host.objects.all()

# QuerySet[obj(id,hostname),obj,...],內(nèi)部元素都是對象

v2 = models.Host.objects.all().values('hostname','ip','port','b_id','b__caption')

#b連接的外鍵 在元組和字典格式里跨表查詢時要用"__"

# QuerySet[{'hostname':c1,'ip':1.1.1.1,'port':80,'b_id':2,'b__caption':abc},{},...],內(nèi)部元素都是字典

v3 = models.Host.objects.all().values_list('hostname', 'ip', 'port', 'b__caption')

# QuerySet[(c1,1.1.1.1,80,2,abc),(),...],內(nèi)部元素都是元組

models.Business.objects.get(id=1)# 獲取到的一個對象,如果不存在就報錯

獲取到一個對象或者None : models.Business.objects.filter(id=1).first()#***建議用這種

return render(request,'host.html',{'v1':v1,'v2':v2,'v3':v3,'b_list':b_list})

1

2

3

4

5

Title

6

7

8

業(yè)務(wù)線列表(對象)

9

10 {% for i in v1 %}11

{{ i.id }}-{{ i.caption }}-{{ i.code }}

12 {% endfor %}13

14

業(yè)務(wù)線列表(字典)

15

16 {% for i in v2 %}17

{{ i.id }}-{{ i.caption }}

18 {% endfor %}19

20

業(yè)務(wù)線列表(元組)

21

22 {% for i in v3 %}23

{{ i.0 }}-{{ i.1 }}

24 {% endfor %}25

26

27

28

29

總結(jié)

以上是生活随笔為你收集整理的django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。