django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)
數據庫操作
dbfirst:數據庫優先
codefirst(ORM):代碼優先,sqlalchemy和DJango都是用的這種
創建表
a.在app下的models.py中,創建類
from django.db import models
class UserInfo(models.Model):
#django會默認為我們生成一個自增且是主鍵的id列
uid = models.AutoField(primary_key=True) #當然也可以自己寫,必須要這樣寫
username = models.CharField(max_length=32) # 用戶名列,字符串類型,指定長度
password = models.CharField(max_length=64)
b.注冊app(在settings下的INSTALLED_APPS中將app的名字添加進路徑)
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
]
c.執行命令
python manage.py makemigrations
python manage.py migrate
Django連接mysql
Django默認使用MySQLdb模塊鏈接MySQL但MySQLdb只支持到python2.7,所以要進行以下操作
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME':'dbname',
'USER': 'root',
'PASSWORD': 'xxx',
'HOST': '',
'PORT': '',
}
}
如下設置放置的與project同名的配置的__init__.py文件中
import pymysql
pymysql.install_as_MySQLdb()
字段
字符串類型
數字類型
時間類型
二進制類型
字段的參數
a.數據庫部分
null 數據庫中字段是否可以為空
email = models.CharField(max_length=60,null=True)
db_column 數據庫中字段的列名
email = models.CharField(max_length=60,db_column='e-mail')
default 數據庫中字段的默認值
email = models.CharField(max_length=60,default='alex3714@163.com')
primary_key 數據庫中字段是否為主鍵
uid = models.AutoField(primary_key=True)#AutoField 自增
db_index 數據庫中字段是否可以建立索引
unique 數據庫中字段是否可以建立唯一索引
unique_for_date 數據庫中字段【日期】部分是否可以建立唯一索引
unique_for_month 數據庫中字段【月】部分是否可以建立唯一索引
unique_for_year 數據庫中字段【年】部分是否可以建立唯一索引
auto_now 創建時自動生成當前時間
uptime = models.DateTimeField(auto_now=True, null=True)
auto_now_add 更新時,自動更新為當前時間
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中顯示選擇框的內容,用不變動的數據放在內存中從而避免跨表操作
如: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:數據庫中的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、根據類對數據庫表中的數據進行各種操作
對數據庫的增、刪、改、查
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==>查看當前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,...],內部元素都是對象
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},{},...],內部元素都是字典
v3 = models.Host.objects.all().values_list('hostname', 'ip', 'port', 'b__caption')
# QuerySet[(c1,1.1.1.1,80,2,abc),(),...],內部元素都是元組
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
Title6
7
8
業務線列表(對象)
9
10 {% for i in v1 %}11
{{ i.id }}-{{ i.caption }}-{{ i.code }}12 {% endfor %}13
14
業務線列表(字典)
15
16 {% for i in v2 %}17
{{ i.id }}-{{ i.caption }}18 {% endfor %}19
20
業務線列表(元組)
21
22 {% for i in v3 %}23
{{ i.0 }}-{{ i.1 }}24 {% endfor %}25
26
27
28
29
總結
以上是生活随笔為你收集整理的django不修改数据库创外键_Django——model(建表,增删改查,外键,多对多)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红利etf是什么指数基金
- 下一篇: 2021年各行业税负率一览表,税负率的含