Django models.py應(yīng)用實(shí)現(xiàn)過程詳解
編寫 models.py 文件
from django.db import models # Create your models here. class User_info(models.Model): username = models.CharField(max_length=25,verbose_name='用戶名') password = models.CharField(max_length=25,verbose_name='密碼') age = models.IntegerField() e_mail = models.EmailField() create_time = models.DateTimeField() update_time = models.DateTimeField()
字段類型
一般數(shù)據(jù)庫中字段類型大概5種(字符串/數(shù)字/浮點(diǎn)型/時(shí)間類型/布爾類型),但Django為了在后臺(tái)admin中可以操作數(shù)據(jù)庫,同時(shí)為了限制在admin中對(duì)數(shù)據(jù)庫的無效操作,Model中設(shè)置了很多種數(shù)據(jù)類型。
1、models.AutoField 自增列=int(11) 如果沒有的話,默認(rèn)會(huì)生成一個(gè)名稱為id的列,如果要顯示的定義一個(gè)自增列,必須把該列設(shè)置為主鍵(primary_key=True) 2、models.CharField 字符串類型字段 必須加max_length參數(shù) 3、models.BooleanField 布爾類型字段=tinyint(1) 不能為空,Blank=True 4、models.ComaSeparatedIntegerField 用逗號(hào)分割的數(shù)字類型=varchar 繼承CharField,所以必須加max_lenght參數(shù) 5、models.DateField 日期字段類型date 參數(shù)auto_now=True表示每次更新都會(huì)更新這個(gè)時(shí)間;參數(shù)auto_now_add表示只是第一次創(chuàng)建時(shí)添加,之后的更新不再改變 6、models.DateTimeField 日期字段類型datetime 同DateField的參數(shù) 7、models.Decimal 十進(jìn)制小數(shù)類型=decimal 必須指定整數(shù)位max_digits和小數(shù)位decimal_places 8、models.EmailField 字符串類型(正則表達(dá)式郵箱)=varchar 對(duì)字符串進(jìn)行正則表達(dá)式驗(yàn)證 9、models.FloatField 浮點(diǎn)類型=double 10、models.IntegerField 整形 11、models.BigIntegerField 長整形 integer_field_ranges = { 'SmallIntegerField': (-32768, 32767), 'IntegerField': (-2147483648, 2147483647), 'BigIntegerField': (-9223372036854775808, 9223372036854775807), 'PositiveSmallIntegerField': (0, 32767), 'PositiveIntegerField': (0, 2147483647), } 12、models.IPAddressField 字符串類型(ip4正則表達(dá)式) 13、models.GenericIPAddressField 字符串類型(ip4和ip6是可選的) 參數(shù)protocol可以是:both、ipv4、ipv6 驗(yàn)證時(shí),會(huì)根據(jù)設(shè)置進(jìn)行報(bào)錯(cuò) 14、models.NullBooleanField 允許為空的布爾類型 15、models.PositiveIntegerFiel 正Integer 16、models.PositiveSmallIntegerField 正smallInteger 17、models.SlugField 減號(hào)、下劃線、字母、數(shù)字 18、models.SmallIntegerField 數(shù)字 數(shù)據(jù)庫中的字段有:tinyint、smallint、int、bigint 19、models.TextField 字符串=longtext 20、models.TimeField 時(shí)間 HH:MM[:ss[.uuuuuu]] 21、models.URLField 字符串類型,地址正則表達(dá)式 22、models.BinaryField 二進(jìn)制 23、models.ImageField 圖片 24、models.FilePathField 文件
執(zhí)行命令:
# 執(zhí)行以下命令,記錄我們對(duì)models.py的所有改動(dòng) python manage.py makemigrations
執(zhí)行后生成如下文件
# Generated by Django 2.1.2 on 2018-12-11 11:39 from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ] operations = [ migrations.CreateModel( name='User_info', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('username', models.CharField(max_length=25, verbose_name='用戶名')), ('password', models.CharField(max_length=25, verbose_name='密碼')), ('age', models.IntegerField()), ('e_mail', models.EmailField(max_length=254)), ('create_time', models.DateTimeField()), ('update_time', models.DateTimeField()), ], ), ]
代碼如下
#如下 這條命令的主要作用就是把這些改動(dòng)作用到數(shù)據(jù)庫也就是執(zhí)行migrations里面新改動(dòng)的遷移文件更新數(shù)據(jù)庫,比如創(chuàng)建數(shù)據(jù)表,或者增加字段屬性 python manage.py migrate
執(zhí)行該命令后 數(shù)據(jù)庫生成如下數(shù)據(jù)庫表
如上圖得到的表名 是以應(yīng)用名命名的,但是不是我們想要的怎么辦了,增加兩行代碼
如下:
from django.db import models # Create your models here. from django.db import models class User_info(models.Model): username = models.CharField(max_length=25,verbose_name='用戶名') password = models.CharField(max_length=25,verbose_name='密碼') age = models.IntegerField() e_mail = models.EmailField() create_time = models.DateTimeField() update_time = models.DateTimeField() class Meta: db_table = 'User_info'
修改代碼重新執(zhí)行
# 執(zhí)行以下命令,記錄我們對(duì)models.py的所有改動(dòng) python manage.py makemigrations
此時(shí)新生成了 一個(gè)migrations 文件
此時(shí)可以針對(duì) 新的文件進(jìn)行執(zhí)行
python manage.py migrate ModelMysql 0002_auto_20181211_1150
查看數(shù)據(jù)庫表得到新建的數(shù)據(jù)表
python manage.py makemigrations這個(gè)命令是記錄我們對(duì)models.py的所有改動(dòng),并且將這個(gè)改動(dòng)遷移到migrations這個(gè)文件下生成一個(gè)文件例如:0001文件,如果你接下來還要進(jìn)行改動(dòng)的話可能生成就是另外一個(gè)文件不一定都是0001文件,但是這個(gè)命令并沒有作用到數(shù)據(jù)庫,這個(gè)剛剛我們?cè)谏厦娴牟僮鬟^程之后已經(jīng)看到了。
而當(dāng)我們執(zhí)行python manage.py migrate 命令時(shí) 這條命令的主要作用就是把這些改動(dòng)作用到數(shù)據(jù)庫也就是執(zhí)行migrations里面新改動(dòng)的遷移文件更新數(shù)據(jù)庫,比如創(chuàng)建數(shù)據(jù)表,或者增加字段屬性
另外一個(gè)需要注意的是這兩個(gè)命令默認(rèn)情況下是作用于全局,也就是對(duì)所有最新更改的models或者migrations下面的遷移文件進(jìn)行對(duì)應(yīng)的操作,如果要想僅僅對(duì)部分app進(jìn)行作用的話 則執(zhí)行如下命令:
python manage.py makemigrations appname python manage.py migrate appname
如果要想精確到某一個(gè)遷移文件則可以使用:
python manage.py migrate appname 文件名
遇到問題:
1、
No migrations to apply(django不能創(chuàng)建數(shù)據(jù)庫中的表的問題)
如下圖:
解決辦法:
第一步:
刪除該app名字下的migrations下除__init__.py外的文件。
第二步:
進(jìn)入數(shù)據(jù)庫,找到django_migrations的表,刪除該app名字的所有記錄。
第三步:執(zhí)行下面這兩條命令:(在項(xiàng)目目錄下)
python manage.py makemigrations python manage.py migrate
原因:
django_migrations表記錄著數(shù)據(jù)庫的對(duì)應(yīng)表的修改記錄。
每次修改后,都執(zhí)行第三步的命令,然后在第一步的文件夾下生成修改的文件,django_migrations表記錄修改的變更過程。
2、
Warning: (3135, "'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.") result = self._query(query)
修改options 如下:
# MySQL adil 密碼:helloyyj DATABASES = { 'default':{ 'ENGINE':'django.db.backends.mysql', 'HOST':'127.0.0.1', 'PORT':'3306', 'NAME':'pyweb', # 數(shù)據(jù)庫名 'USER':'adil', 'PASSWORD':'helloyyj', 'OPTIONS':{ 'sql_mode': 'traditional' }, } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 解決django同步數(shù)據(jù)庫的時(shí)候app models表沒有成功創(chuàng)建的問題
- Django 模型類(models.py)的定義詳解
- python Django中models進(jìn)行模糊查詢的示例
- Django的models中on_delete參數(shù)詳解
- Django的models模型的具體使用
- django1.11.1 models 數(shù)據(jù)庫同步方法
- 淺談Django中的數(shù)據(jù)庫模型類-models.py(一對(duì)一的關(guān)系)
- Django中反向生成models.py的實(shí)例講解
- Django 根據(jù)數(shù)據(jù)模型models創(chuàng)建數(shù)據(jù)表的實(shí)例
- Django對(duì)models里的objects的使用詳解
相關(guān)文章
Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的遠(yuǎn)程登錄windows系統(tǒng)功能,結(jié)合實(shí)例形式分析了Python基于wmi模塊的遠(yuǎn)程連接與進(jìn)程操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06Python?GUI利用tkinter皮膚ttkbootstrap實(shí)現(xiàn)好看的窗口
這篇文章主要介紹了Python?GUI利用tkinter皮膚ttkbootstrap實(shí)現(xiàn)好看的窗口,文章基于python的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06Pandas實(shí)現(xiàn)解析JSON數(shù)據(jù)與導(dǎo)出的示例詳解
其實(shí)使用pandas解析JSON?Dataset要方便得多,所以這篇文章主要為大家介紹了Pandas實(shí)現(xiàn)解析JSON數(shù)據(jù)與導(dǎo)出的具體方法,需要的小伙伴可以收藏一下2023-07-07解決pycharm最左側(cè)Tool Buttons顯示不全的問題
今天小編就為大家分享一篇解決pycharm最左側(cè)Tool Buttons顯示不全的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12