Django開 發(fā)操作數(shù)據(jù)庫比使用pymysql操作更簡(jiǎn)單,內(nèi)部提供了ORM框架。
下面是pymysql 和orm操作數(shù)據(jù)庫的示意圖,pymysql就是mysql的驅(qū)動(dòng),代碼直接操作pymysql ,需要自己寫增刪改查的語句
django 就是也可以使用pymysql、mysqlclient作為驅(qū)動(dòng),但是目前對(duì)mysqlclient的支持更好,在驅(qū)動(dòng)的基礎(chǔ)只上封裝了orm框架,不用直接去寫sql,是操作更簡(jiǎn)單了。
1、安裝第三方模塊
pip install mysqlclient
我的是windows環(huán)境,這樣安裝的時(shí)候報(bào)錯(cuò),我們需要先下載需要先下載mysqlclient whl文件
下載地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
或者h(yuǎn)ttps://pypi.org/project/mysqlclient/#files
找對(duì)對(duì)應(yīng)的python版本下載,我的是3.7就下載這個(gè)
下載后,放到一個(gè)目錄,cmd 進(jìn)入到該目錄,再執(zhí)行
pip install mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl
就可以安裝成功了。
2、ORM
ORM可以幫助我們做兩件事:
- 創(chuàng)建、修改、刪除數(shù)據(jù)庫中的表(不用你寫SQL語句)。[無法創(chuàng)建數(shù)據(jù)庫],數(shù)據(jù)庫我們使用其它工手動(dòng)創(chuàng)建
- 操作表中的數(shù)據(jù)(不用寫SQL語句)
django連接數(shù)據(jù)庫
在settings.py中配置mysql
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'unicom',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '10.172.3.171',
'PORT': 3306,
}
}
創(chuàng)建表
在app01目錄下的models.py 中寫一個(gè)類,類名是UserInfo, 那么表面就會(huì)是app01_userinfo,django會(huì)自動(dòng)加上app的名字
字段 通過models來創(chuàng)建,選擇不同的字段類型,常用的字段類型有:
CharField 字符型
IntegerField 整形
DecimalField 浮點(diǎn)型
DateField 日期類型,只包含年月日
DateTimeField 日期類型,包含年月日時(shí)分秒
BigIntegerField 長(zhǎng)整型
SmallIntegerField 小整型
from django.db import models
class UserInfo(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
在app01下面的models.py中創(chuàng)建一個(gè)UserInfo的類,必須繼承models.Model
django 會(huì)幫我們自己創(chuàng)建一個(gè)表名為app01_UserInfo的表,包含字段name, password,age
相當(dāng)于執(zhí)行下面語句
create table app01_userinfo(
id bigint auto_increment primary key,
name varchar(32),
password varchar(64),
age int
);
每個(gè)表都會(huì)自動(dòng)給創(chuàng)建id列
執(zhí)行命令創(chuàng)建數(shù)據(jù)庫表: 注意app要先注冊(cè)
py -3 manage.py makemigrations
py -3 manage.py migrate
如果已經(jīng)手動(dòng)創(chuàng)建了admin表的,要用orm 來連接數(shù)據(jù)庫可以,又不希望django改變表明,指定數(shù)據(jù)表名稱,通過內(nèi)部類 Meta指定表名
from django.db import models
class admin(models.Model):
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()
# 添加一個(gè)時(shí)間字段
create_time = models.DateTimeField(null=True)
class Meta:
db_table = 'admin'
在表中新增列時(shí),由于已存在列中可能已有數(shù)據(jù),所以新增列必須要指定新增列對(duì)應(yīng)的數(shù)據(jù):
- 手動(dòng)輸入一個(gè)值。
- 設(shè)置默認(rèn)值
age=mode1s.IntegerField(default=2)
- 允許為空
data=models.IntegerField(null=True, blank=True )
對(duì)表的操作
一般是在實(shí)現(xiàn)的函數(shù)中來操作數(shù)據(jù)庫
在views.py中要導(dǎo)入 from app01 import models
查詢類
models.UserInfo.objects.all() #查詢數(shù)據(jù)庫中所有內(nèi)容,返回的是[obj,obj,obj],一行數(shù)據(jù)一個(gè)對(duì)象
models.UserInfo.objects.filter(id=nid).first() #根據(jù)條件查詢,只獲取第一個(gè)對(duì)象
對(duì)字符串的查詢
models.PrettyNum.objects.filter(mobile='136') #等于136
models.PrettyNum.objects.filter(mobile__startswith='136') #以136開頭
models.PrettyNum.objects.filter(mobile__endswith='888') #以888結(jié)尾
models.PrettyNum.objects.filter(mobile__contains='136') #包含136
對(duì)于數(shù)字的查詢文章來源:http://www.zghlxwxcb.cn/news/detail-625818.html
models.PrettyNum.objects.filter(id=12) #等于12
models.PrettyNum.objects.filter(id__gt=12) #大于12
models.PrettyNum.objects.filter(id__gte=12) #大于等于12
models.PrettyNum.objects.filter(id__lt=12) #小于12
models.PrettyNum.objects.filter(id__lte=12) #小于等于12
查詢支持兩種不同的寫法文章來源地址http://www.zghlxwxcb.cn/news/detail-625818.html
models.PrettyNum.objects.filter(id=3,mobile='12312341234')
data_dict = {'mobile':'13413241234','id':3}
models.PrettyNum.objects.filter(**data_dict)
到了這里,關(guān)于django使用mysql數(shù)據(jù)庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!