1. 程式人生 > >python學習第六十八天:數據庫相關操作

python學習第六十八天:數據庫相關操作

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學習第六十八天:數據庫相關操作