django數據庫相關操做

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)
相關文章
相關標籤/搜索