python學習第六十八天:數據庫相關操作
阿新 • • 發佈:2018-09-03
order 運行 反向 all djang 建表 ima nag publish
ORM簡介
orm能幹的事:
1 創建表,修改表,刪除表
2 插入數據
3 修改數據
4 刪除數據
不能幹:不能創建數據庫
類名-----》表
對象------》一條數據
屬性-----》字段
ORM“對象-關系-映射”的簡稱
#sql中的表
#創建表:
CREATE TABLE employee(
id INT PRIMARY KEY auto_increment ,
name VARCHAR (20),
gender BIT default 1,
birthday DATA ,
department VARCHAR (20),
salary DECIMAL (8,2) unsigned,
);
#sql中的表紀錄
#添加一條表紀錄:
INSERT employee (name,gender,birthday,salary,department)
VALUES ("alex",1,"1985-12-12",8000,"保潔部");
#查詢一條表紀錄:
SELECT * FROM employee WHERE age=24;
#更新一條表紀錄:
UPDATE employee SET birthday="1989-10-24" WHERE id=1;
#刪除一條表紀錄:
DELETE FROM employee WHERE name="alex"
#python的類
class Employee(models.Model):
id=models.AutoField(primary_key=True)
name=models.CharField(max_length=32)
gender=models.BooleanField()
birthday=models.DateField()
department=models.CharField(max_length=32)
salary=models.DecimalField(max_digits=8,decimal_places=2)
#python的類對象
#添加一條表紀錄:
emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保潔部")
emp.save()
#查詢一條表紀錄:
Employee.objects.filter(age=24)
#更新一條表紀錄:
Employee.objects.filter(id=1).update(birthday="1989-10-24")
#刪除一條表紀錄:
Employee.objects.filter(name="alex").delete()
使用mysql步驟
0 創建數據庫(orm不能創建數據庫)
1 在settings裏配置
2 在app的init.py文件裏寫上:import pymysql
pymysql.install_as_MySQLdb()
3 在models裏定義類,類必須繼承 models.Model
4 寫屬性,對應著數據庫的字段
5 執行 python manage.py makemigrations(相當於做一個記錄)
6 執行 pyhton manage.py migrate (會把記錄執行到數據庫)
創建出來的表名是app的名字_類名
settings配置
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘lqz‘,
‘USER‘: ‘root‘,
‘PASSWORD‘: ‘123456‘,
‘HOST‘: ‘127.0.0.1‘,
‘PORT‘: 3306,
‘ATOMIC_REQUEST‘: True,
‘OPTIONS‘: {
"init_command": "SET storage_engine=MyISAM",
}
}
}
‘‘‘
‘NAME‘:要連接的數據庫,連接前需要創建好
‘USER‘:連接數據庫的用戶名
‘PASSWORD‘:連接數據庫的密碼
‘HOST‘:連接主機,默認本機
‘PORT‘:端口 默認3306
‘ATOMIC_REQUEST‘: True,
設置為True統一個http請求對應的所有sql都放在一個事務中執行(要麽所有都成功,要麽所有都失敗)。
是全局性的配置, 如果要對某個http請求放水(然後自定義事務),可以用non_atomic_requests修飾器
‘OPTIONS‘: {
"init_command": "SET storage_engine=MyISAM",
}
設置創建表的存儲引擎為MyISAM,INNODB
表的查詢
<1> all(): 查詢所有結果
<2> filter(**kwargs): 它包含了與所給篩選條件相匹配的對象
<3> get(**kwargs): 返回與所給篩選條件相匹配的對象,返回結果有且只有一個,
如果符合篩選條件的對象超過一個或者沒有都會拋出錯誤。
<4> exclude(**kwargs): 它包含了與所給篩選條件不匹配的對象
<5> order_by(*field): 對查詢結果排序
<6> reverse(): 對查詢結果反向排序
<8> count(): 返回數據庫中匹配查詢(QuerySet)的對象數量。
<9> first(): 返回第一條記錄
<10> last(): 返回最後一條記錄
<11> exists(): 如果QuerySet包含數據,就返回True,否則返回False
<12> values(*field): 返回一個ValueQuerySet——一個特殊的QuerySet,運行後得到的並不是一系列
model的實例化對象,而是一個可叠代的字典序列
<13> values_list(*field): 它與values()非常相似,它返回的是一個元組序列,values返回的是一個字典序列
<14> distinct(): 從返回結果中剔除重復紀錄
表關系創建
一個出版社可以出版多本書,一本書只能有一個出版社
一對多(一旦確立了一對多的關系,關聯字段要放在多的表裏)
models.ForeignKey(to=‘Publish‘,to_field=‘nid‘,on_delete=models.CASCADE)
一個作者可以寫多本書,一本書可以有多個作者
多對多(需要第三張表)
models.ManyToManyField(to=‘Author‘)
一對一
author和author_detail是一對一
models.OneToOneField(to=‘AuthorDatail‘,to_field=‘nid‘,unique=True,on_delete=models.CASCADE)
python學習第六十八天:數據庫相關操作