摘要:對象關(guān)系映射,簡稱模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。在業(yè)務(wù)邏輯層和數(shù)據(jù)庫層之間充當(dāng)了橋梁的作用。每個(gè)字段被指定為一個(gè)類屬性,每個(gè)屬性映射到一個(gè)數(shù)據(jù)庫列。字符類型,必須提供參數(shù),表示字符長度。
對象關(guān)系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。
簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中。
ORM在業(yè)務(wù)邏輯層和數(shù)據(jù)庫層之間充當(dāng)了橋梁的作用。
一、如何在Django項(xiàng)目中使用mysql數(shù)據(jù)庫? 1. 在Django項(xiàng)目的settings.py文件中,配置數(shù)據(jù)庫連接信息:DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "你的數(shù)據(jù)庫名稱", # 需要自己手動創(chuàng)建數(shù)據(jù)庫 "USER": "數(shù)據(jù)庫用戶名", "PASSWORD": "數(shù)據(jù)庫密碼", "HOST": "數(shù)據(jù)庫IP", "POST": 3306 } }2. 在Django項(xiàng)目的__init__.py文件中寫如下代碼,告訴Django使用pymysql模塊連接MySQL數(shù)據(jù)庫:
import pymysql pymysql.install_as_MySQLdb()二、Django中的映射關(guān)系
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
first_name 和 last_name 是模型的字段。每個(gè)字段被指定為一個(gè)類屬性,每個(gè)屬性映射到一個(gè)數(shù)據(jù)庫列。
上面的 Person 模型將會像這樣創(chuàng)建一個(gè)數(shù)據(jù)庫表:
CREATE TABLE myapp_person ( "id" serial NOT NULL PRIMARY KEY, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL );
一些說明:
表myapp_person的名稱是自動生成的,如果你要自定義表名,需要在model的Meta類中指定 db_table 參數(shù),強(qiáng)烈建議使用小寫表名,特別是使用MySQL作為后端數(shù)據(jù)庫時(shí)。
id字段是自動添加的,如果你想要指定自定義主鍵,只需在其中一個(gè)字段中指定 primary_key=True 即可。如果Django發(fā)現(xiàn)你已經(jīng)明確地設(shè)置了Field.primary_key,它將不會添加自動ID列。
字段名 | 說明 |
---|---|
AutoField | int自增列,需填入?yún)?shù) primary_key=True。當(dāng)model中如果沒有自增列,則自動會創(chuàng)建一個(gè)列名為id的列。 |
IntegerField | 整數(shù)類型,范圍在 -2147483648 to 2147483647。 |
CharField | 字符類型,必須提供max_length參數(shù), max_length表示字符長度。 |
DateField | 日期字段,日期格式 YYYY-MM-DD,相當(dāng)于Python中的datetime.date()實(shí)例。 |
DateTimeField | 日期時(shí)間字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相當(dāng)于Python中的datetime.datetime()實(shí)例。 |
字段名 | 說明 |
---|---|
BigAutoField(AutoField) | - bigint自增列,必須填入?yún)?shù) primary_key=True 注:當(dāng)model中如果沒有自增列,則自動會創(chuàng)建一個(gè)列名為id的列 |
SmallIntegerField(IntegerField) | - 小整數(shù) -32768 ~ 32767 |
PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) | - 正小整數(shù) 0 ~ 32767 |
PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField) | - 正整數(shù) 0 ~ 2147483647 |
BigIntegerField(IntegerField) | - 長整型(有符號的) -9223372036854775808 ~ 9223372036854775807 |
BooleanField(Field) | - 布爾值類型 |
NullBooleanField(Field): | - 可以為空的布爾值 |
TextField(Field) | -文本類型 |
EmailField(CharField) | - 字符串類型,Django Admin以及ModelForm中提供驗(yàn)證機(jī)制 |
IPAddressField(Field) | - 字符串類型,Django Admin以及ModelForm中提供驗(yàn)證 IPV4 機(jī)制 |
GenericIPAddressField(Field) | - 字符串類型,Django Admin以及ModelForm中提供驗(yàn)證 Ipv4和Ipv6 - 參數(shù):protocol,用于指定Ipv4或Ipv6, "both","ipv4","ipv6"unpack_ipv4, 如果指定為True,則輸入::ffff:192.0.2.1時(shí)候,可解析為192.0.2.1,開啟此功能,需要protocol="both" |
URLField(CharField) | - 字符串類型,Django Admin以及ModelForm中提供驗(yàn)證 URL |
SlugField(CharField) | - 字符串類型,Django Admin以及ModelForm中提供驗(yàn)證支持 字母、數(shù)字、下劃線、連接符(減號) |
CommaSeparatedIntegerField(CharField) | - 字符串類型,格式必須為逗號分割的數(shù)字 |
UUIDField(Field) | - 字符串類型,Django Admin以及ModelForm中提供對UUID格式的驗(yàn)證 |
FilePathField(Field) | - 字符串,Django Admin以及ModelForm中提供讀取文件夾下文件的功能 - 參數(shù):path: 文件夾路徑;match=None:正則匹配;recursive=False:遞歸下面的文件夾;allow_files=True:允許文件;allow_folders=False:允許文件夾; |
FileField(Field) | - 字符串,路徑保存在數(shù)據(jù)庫,文件上傳到指定目錄 - 參數(shù):upload_to = "" :傳文件的保存路徑;storage = None :存儲組件,默認(rèn)django.core.files.storage.FileSystemStorage |
ImageField(FileField) | - 字符串,路徑保存在數(shù)據(jù)庫,文件上傳到指定目錄 - 參數(shù):upload_to = "":上傳文件的保存路徑; |
storage = None:存儲組件,默認(rèn)django.core.files.storage.FileSystemStorage;width_field=None, 上傳圖片的高度保存的數(shù)據(jù)庫字段名(字符串;height_field=None:上傳圖片的寬度保存的數(shù)據(jù)庫字段名(字符串); | |
DateField(DateTimeCheckMixin, Field) | - 日期格式 YYYY-MM-DD |
TimeField(DateTimeCheckMixin, Field) | - 時(shí)間格式 HH:MM[:ss[.uuuuuu]] |
DurationField(Field) | - 長整數(shù),時(shí)間間隔,數(shù)據(jù)庫中按照bigint存儲,ORM中獲取的值為datetime.timedelta類型 |
FloatField(Field) | - 浮點(diǎn)型 |
DecimalField(Field) | - 10進(jìn)制小數(shù) - 參數(shù):max_digits:小數(shù)總長度;decimal_places:小數(shù)位長度 |
BinaryField(Field) | - 二進(jìn)制類型 |
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42728.html
摘要:前言項(xiàng)目中開發(fā)的幾個(gè)服務(wù)一直使用作為服務(wù)器,本人也曾提出過疑問,為什么是,得到的答案是比較,,,的并發(fā)性能最好,而且最為輕量級。的賣點(diǎn)是超高的開發(fā)效率,其性能擴(kuò)展有限的性能表現(xiàn)前兩天有寫一篇的帖子傳送門使用對鑒權(quán)接口加壓,看的性能表現(xiàn)。 前言 項(xiàng)目中開發(fā)的幾個(gè)服務(wù)一直使用tornado作為http服務(wù)器,本人也曾提出過疑問,為什么是tornado,得到的答案是比較tornado,fla...
摘要:當(dāng)然還有其他高級的使用,日后再說完整的用戶名郵箱聯(lián)系地址留言信息用戶留言信息使用之前已經(jīng)定義好了數(shù)據(jù)模型的字段元數(shù)據(jù)方法等。 前言 接續(xù)前文,上一篇文章主要涉及了 Django 項(xiàng)目的基礎(chǔ)配置等,這篇主要涉及數(shù)據(jù)庫相關(guān)的 ORM ,也就是 Django 中的 Model 的使用,MVT 三層之間的交互 教程基本都是東拼西湊的,防止有些東西表述不準(zhǔn)確,因?yàn)槲抑皩?JavaScript ...
摘要:為了將代碼規(guī)范,約定俗成將視圖放置在項(xiàng)目或應(yīng)用程序目錄中命名為文件中。必須接受字段表示字符串長度不能超過該值,默認(rèn)的標(biāo)簽最常用的。例,自動添加發(fā)布時(shí)間。以字符串的形式存在,默認(rèn)最大長度,可以通過參數(shù)設(shè)置。用于保存通用唯一識別碼的字段。 MVC 大部分開發(fā)語言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模塊之間的耦合性,方便變更,更容易重構(gòu)代碼,最大程度上實(shí)現(xiàn)代碼的重...
摘要:中的對象查詢框架自帶了,實(shí)現(xiàn)了一些比較強(qiáng)大而且方便的查詢功能,這些功能和表無關(guān)。實(shí)際的模型類比如類定義后,不實(shí)例話的情況下就要具備這樣的查詢效果。 Django中的對象查詢 Django框架自帶了ORM,實(shí)現(xiàn)了一些比較強(qiáng)大而且方便的查詢功能,這些功能和表無關(guān)。比如下面這個(gè)例子: class Question(models.Model): question_text = mode...
閱讀 2532·2021-09-24 10:29
閱讀 3817·2021-09-22 15:46
閱讀 2584·2021-09-04 16:41
閱讀 2990·2019-08-30 15:53
閱讀 1271·2019-08-30 14:24
閱讀 3064·2019-08-30 13:19
閱讀 2181·2019-08-29 14:17
閱讀 3532·2019-08-29 12:55