# 第二節:數據庫操作
# 操作數據庫
## Django配置連接數據庫:
在操作數據庫之前,首先先要連接數據庫。這里我們以配置`MySQL`為例來講解。`Django`連接數據庫,不需要單獨的創建一個連接對象。只需要在`settings.py`文件中做好數據庫相關的配置就可以了。示例代碼如下:
```
<pre class="calibre12">```
DATABASES = {
<span class="hljs-string">'default'</span>: {
<span class="hljs-title"># 數據庫引擎(是mysql還是oracle等)</span>
<span class="hljs-string">'ENGINE'</span>: <span class="hljs-string">'django.db.backends.mysql'</span>,
<span class="hljs-title"># 數據庫的名字</span>
<span class="hljs-string">'NAME'</span>: <span class="hljs-string">'dfz'</span>,
<span class="hljs-title"># 連接mysql數據庫的用戶名</span>
<span class="hljs-string">'USER'</span>: <span class="hljs-string">'root'</span>,
<span class="hljs-title"># 連接mysql數據庫的密碼</span>
<span class="hljs-string">'PASSWORD'</span>: <span class="hljs-string">'root'</span>,
<span class="hljs-title"># mysql數據庫的主機地址</span>
<span class="hljs-string">'HOST'</span>: <span class="hljs-string">'127.0.0.1'</span>,
<span class="hljs-title"># mysql數據庫的端口號</span>
<span class="hljs-string">'PORT'</span>: <span class="hljs-string">'3306'</span>,
}
}
```
```
## 在Django中操作數據庫:
在`Django`中操作數據庫有兩種方式。第一種方式就是使用原生`sql`語句操作,第二種就是使用`ORM`模型來操作。這節課首先來講下第一種。
在`Django`中使用原生`sql`語句操作其實就是使用`python db api`的接口來操作。如果你的`mysql`驅動使用的是`pymysql`,那么你就是使用`pymysql`來操作的,只不過`Django`將數據庫連接的這一部分封裝好了,我們只要在`settings.py`中配置好了數據庫連接信息后直接使用`Django`封裝好的接口就可以操作了。示例代碼如下:
```
<pre class="calibre12">```
<span class="hljs-title"># 使用django封裝好的connection對象,會自動讀取settings.py中數據庫的配置信息</span>
<span class="hljs-keyword">from</span> django.db <span class="hljs-keyword">import</span> connection
<span class="hljs-title"># 獲取游標對象</span>
cursor = connection.cursor()
<span class="hljs-title"># 拿到游標對象后執行sql語句</span>
cursor.execute(<span class="hljs-string">"select * from book"</span>)
<span class="hljs-title"># 獲取所有的數據</span>
rows = cursor.fetchall()
<span class="hljs-title"># 遍歷查詢到的數據</span>
<span class="hljs-keyword">for</span> row <span class="hljs-keyword">in</span> rows:
print(row)
```
```
以上的`execute`以及`fetchall`方法都是`Python DB API`規范中定義好的。任何使用`Python`來操作`MySQL`的驅動程序都應該遵循這個規范。所以不管是使用`pymysql`或者是`mysqlclient`或者是`mysqldb`,他們的接口都是一樣的。更多規范請參考:[https://www.python.org/dev/peps/pep-0249/。](https://www.python.org/dev/peps/pep-0249/%E3%80%82)
## Python DB API下規范下cursor對象常用接口:
1. `description`:如果`cursor`執行了查詢的`sql`代碼。那么讀取`cursor.description`屬性的時候,將返回一個列表,這個列表中裝的是元組,元組中裝的分別是`(name,type_code,display_size,internal_size,precision,scale,null_ok)`,其中`name`代表的是查找出來的數據的字段名稱,其他參數暫時用處不大。
2. `rowcount`:代表的是在執行了`sql`語句后受影響的行數。
3. `close`:關閉游標。關閉游標以后就再也不能使用了,否則會拋出異常。
4. `execute(sql[,parameters])`:執行某個`sql`語句。如果在執行`sql`語句的時候還需要傳遞參數,那么可以傳給`parameters`參數。示例代碼如下:
```
<pre class="calibre12">```
cursor.execute(<span class="hljs-string">"select * from article where id=%s"</span>,(<span class="hljs-params">1</span>,))
```
```
5. `fetchone`:在執行了查詢操作以后,獲取第一條數據。
6. `fetchmany(size)`:在執行查詢操作以后,獲取多條數據。具體是多少條要看傳的`size`參數。如果不傳`size`參數,那么默認是獲取第一條數據。
7. `fetchall`:獲取所有滿足`sql`語句的數據。
- Introduction
- 第一章:學前準備
- 第一節:虛擬環境
- 第二節:準備工作
- 第三節:Django介紹
- 第四節:URL組成部分
- 第二章:URL與視圖
- 第一節:第一個Django項目
- 第二節:視圖與URL分發器
- 第三章:模板
- 第一節:模板介紹
- 第二節:模板變量
- 第三節:常用標簽
- 第四節:常用過濾器
- 第五節:自定義過濾器
- 第七節:模版結構優化
- 第八節:加載靜態文件
- 第四章:數據庫
- 第一節:MySQL相關軟件
- 第二節:數據庫操作
- 第三節:ORM模型
- 第四節:模型常用字段
- 第五節:外鍵和表關系
- 第六節:增刪改查操作
- 第七節:查詢操作
- 第八節:QuerySet API
- 第九節:ORM模型遷移
- 第十節:ORM作業
- 第十一節:ORM作業參考答案
- 第十二節:Pycharm連接數據庫
- 第五章:視圖高級
- 第一節:限制請求method
- 第二節:頁面重定向
- 第三節:HttpRequest對象
- 第四節:HttpResponse對象
- 第五節:生成CSV文件
- 第六節:類視圖
- 第七節:錯誤處理
- 第六章:表單
- 第一節:表單概述
- 第二節:用表單驗證數據
- 第三節:ModelForm
- 第四節:文件上傳
- 第七章:cookie和session
- 第八章:上下文處理器和中間件
- 第一節:上下文處理器
- 第二節:中間件
- 第九章:安全
- 第一節:CSRF攻擊
- 第二節:XSS攻擊
- 第三節:點擊劫持攻擊
- 第四節:SQL注入
- 第十章:信號
- 第一節:什么是信號
- 第十一章:驗證和授權
- 第一節:概述
- 第二節:用戶對象
- 第三節:權限和分組
- 第十二章:Admin系統
- 第十三章:Django的緩存
- 第十四章:memcached
- 第十五章:Redis