操作數(shù)據(jù)庫
Django配置連接數(shù)據(jù)庫:
在操作數(shù)據(jù)庫之前,首先先要連接數(shù)據(jù)庫宝磨。這里我們以配置MySQL
為例來講解。Django
連接數(shù)據(jù)庫,不需要單獨(dú)的創(chuàng)建一個(gè)連接對象唤锉。只需要在settings.py
文件中做好數(shù)據(jù)庫相關(guān)的配置就可以了世囊。示例代碼如下:
DATABASES = {
'default': {
# 數(shù)據(jù)庫引擎(是mysql還是oracle等)
'ENGINE': 'django.db.backends.mysql',
# 數(shù)據(jù)庫的名字
'NAME': 'dfz',
# 連接mysql數(shù)據(jù)庫的用戶名
'USER': 'root',
# 連接mysql數(shù)據(jù)庫的密碼
'PASSWORD': 'root',
# mysql數(shù)據(jù)庫的主機(jī)地址
'HOST': '127.0.0.1',
# mysql數(shù)據(jù)庫的端口號(hào)
'PORT': '3306',
}
}
在Django中操作數(shù)據(jù)庫:
在Django
中操作數(shù)據(jù)庫有兩種方式。第一種方式就是使用原生sql
語句操作窿祥,第二種就是使用ORM
模型來操作株憾。這節(jié)課首先來講下第一種。
在Django
中使用原生sql
語句操作其實(shí)就是使用python db api
的接口來操作晒衩。如果你的mysql
驅(qū)動(dòng)使用的是pymysql
嗤瞎,那么你就是使用pymysql
來操作的,只不過Django
將數(shù)據(jù)庫連接的這一部分封裝好了听系,我們只要在settings.py
中配置好了數(shù)據(jù)庫連接信息后直接使用Django
封裝好的接口就可以操作了贝奇。示例代碼如下:
# 使用django封裝好的connection對象,會(huì)自動(dòng)讀取settings.py中數(shù)據(jù)庫的配置信息
from django.db import connection
# 獲取游標(biāo)對象
cursor = connection.cursor()
# 拿到游標(biāo)對象后執(zhí)行sql語句
cursor.execute("select * from book")
# 獲取所有的數(shù)據(jù)
rows = cursor.fetchall()
# 遍歷查詢到的數(shù)據(jù)
for row in rows:
print(row)
以上的execute
以及fetchall
方法都是Python DB API
規(guī)范中定義好的靠胜。任何使用Python
來操作MySQL
的驅(qū)動(dòng)程序都應(yīng)該遵循這個(gè)規(guī)范掉瞳。所以不管是使用pymysql
或者是mysqlclient
或者是mysqldb
,他們的接口都是一樣的髓帽。更多規(guī)范請參考:https://www.python.org/dev/peps/pep-0249/。
Python DB API下規(guī)范下cursor對象常用接口:
description
:如果cursor
執(zhí)行了查詢的sql
代碼脑豹。那么讀取cursor.description
屬性的時(shí)候郑藏,將返回一個(gè)列表,這個(gè)列表中裝的是元組瘩欺,元組中裝的分別是(name,type_code,display_size,internal_size,precision,scale,null_ok)
必盖,其中name
代表的是查找出來的數(shù)據(jù)的字段名稱,其他參數(shù)暫時(shí)用處不大俱饿。rowcount
:代表的是在執(zhí)行了sql
語句后受影響的行數(shù)歌粥。close
:關(guān)閉游標(biāo)。關(guān)閉游標(biāo)以后就再也不能使用了拍埠,否則會(huì)拋出異常失驶。-
execute(sql[,parameters])
:執(zhí)行某個(gè)sql
語句。如果在執(zhí)行sql
語句的時(shí)候還需要傳遞參數(shù)枣购,那么可以傳給parameters
參數(shù)嬉探。示例代碼如下:cursor.execute("select * from article where id=%s",(1,))
fetchone
:在執(zhí)行了查詢操作以后,獲取第一條數(shù)據(jù)棉圈。fetchmany(size)
:在執(zhí)行查詢操作以后涩堤,獲取多條數(shù)據(jù)。具體是多少條要看傳的size
參數(shù)分瘾。如果不傳size
參數(shù)胎围,那么默認(rèn)是獲取第一條數(shù)據(jù)。fetchall
:獲取所有滿足sql
語句的數(shù)據(jù)。