
## MySQL驅動程序安裝
我們使用Django來操作MySQL,實際上底層還是通過Python來操作的。因此我們想要用Django來操作MySQL,首先還是需要安裝一個驅動程序。在Python3中,驅動程序有多種選擇。比如有pymysql以及mysqlclient等。這里我們就使用mysqlclient來操作。mysqlclient安裝非常簡單。只需要通過pip install mysqlclient即可安裝。
常見MySQL驅動介紹:
1. MySQL-python:也就是MySQLdb。是對C語言操作MySQL數據庫的一個簡單封裝。遵循了Python DB API v2
但是只支持Python2,目前還不支持Python3。
2. mysqlclient:是MySQL-python的另外一個分支。支持Python3 并且修復了一些bug。
3. pymysql:純Python實現的一個驅動。因為是純Python編寫的,因此執行效率不如MySQL-python。并且也因為是純Python編寫的,因此可以和Python代碼無縫銜接。
4. MySQL Connector/Python:MySQL官方推出的使用純Python連接MySQL的驅動。因為是純Python開發的。效率不高。
## Django配置連接數據庫
在操作數據庫之前,首先先要連接數據庫。這里我們以配置MySQL為例來講解。Django連接數據庫,不需要單獨的創建一個連接對象。只需要在settings.py文件中做好數據庫相關的配置就可以了
```
DATABASES = {
'default': {
# 數據庫引擎(是mysql還是oracle等)
'ENGINE': 'django.db.backends.mysql',
# 數據庫的名字
'NAME': 'logic',
# 連接mysql數據庫的用戶名
'USER': 'root',
# 連接mysql數據庫的密碼
'PASSWORD': 'root',
# mysql數據庫的主機地址
'HOST': '127.0.0.1',
# mysql數據庫的端口號
'PORT': '3306',
}
}
連接Linux服務器MySQL問題:https://blog.csdn.net/qq473179304/article/details/56665364
```
### 在Django中操作數據庫
在Django中操作數據庫有兩種方式。第一種方式就是使用原生sql語句操作,第二種就是使用ORM模型來操作。
在Django中使用原生sql語句操作其實就是使用python db api的接口來操作。如果你的mysql驅動使用的是pymysql,那么你就是使用pymysql來操作的,只不過Django將數據庫連接的這一部分封裝好了,我們只要在settings.py中配置好了數據庫連接信息后直接使用Django封裝好的接口就可以操作了
```
# 使用django封裝好的connection對象,會自動讀取settings.py中數據庫的配置信息
from django.db import connection
# 獲取游標對象
cursor = connection.cursor()
# 拿到游標對象后執行sql語句
cursor.execute("select * from book")
# 獲取所有的數據
rows = cursor.fetchall()
# 遍歷查詢到的數據
for row in rows:
print(row)
```
以上的execute以及fetchall方法都是Python DB API規范中定義好的。任何使用Python來操作MySQL的驅動程序都應該遵循這個規范。所以不管是使用pymysql或者是mysqlclient或者是mysqldb,他們的接口都是一樣的。
### Python DB API下規范下cursor對象常用接口
<ol>
<li><p><code>description</code>:如果<code>cursor</code>執行了查詢的<code>sql</code>代碼。那么讀取<code>cursor.description</code>屬性的時候,將返回一個列表,這個列表中裝的是元組,元組中裝的分別是<code>(name,type_code,display_size,internal_size,precision,scale,null_ok)</code>,其中<code>name</code>代表的是查找出來的數據的字段名稱,其他參數暫時用處不大。</p>
</li>
<li><p><code>rowcount</code>:代表的是在執行了<code>sql</code>語句后受影響的行數。</p>
</li>
<li><p><code>close</code>:關閉游標。關閉游標以后就再也不能使用了,否則會拋出異常。</p>
</li>
<li><p><code>execute(sql[,parameters])</code>:執行某個<code>sql</code>語句。如果在執行<code>sql</code>語句的時候還需要傳遞參數,那么可以傳給<code>parameters</code>參數。示例代碼如下:</p>
<pre><code class="lang-python"> cursor.execute(<span class="hljs-string">"select * from article where id=%s"</span>,(<span class="hljs-number">1</span>,))
</code></pre>
</li>
<li><p><code>fetchone</code>:在執行了查詢操作以后,獲取第一條數據。</p>
</li>
<li><p><code>fetchmany(size)</code>:在執行查詢操作以后,獲取多條數據。具體是多少條要看傳的<code>size</code>參數。如果不傳<code>size</code>參數,那么默認是獲取第一條數據。</p>
</li>
<li><p><code>fetchall</code>:獲取所有滿足<code>sql</code>語句的數據。</p>
</li>
</ol>
- 空白目錄
- 1-Django前導知識
- 1-1-虛擬環境
- 1-2-Django框架介紹與環境搭建
- 2-URL與視圖
- 2-1-URL與視圖
- 3-模板
- 3-1-模板介紹
- 3-2-模板變量
- 3-3-常用標簽
- 3-4-模板常用過濾器
- 3-5-模板結構優化
- 3-6-加載靜態文件
- 4-數據庫
- 4-1-操作數據庫
- 4-2-圖書管理系統
- 4-3-ORM模型介紹
- 4-4-ORM模型的增刪改查
- 4-5-模型常用屬性
- 4-6-外鍵和表
- 4-7-查詢操作
- 4-8-QuerySet的方法
- 4-9-ORM模型練習
- 4-10-ORM模型遷移
- 5-視圖高級
- 1-Django限制請求method
- 2-頁面重定向
- 3-HttpRequest對象
- 4-HttpResponse對象
- 5-類視圖
- 6-錯誤處理
- 6-表單
- 1-用表單驗證數據
- 2-ModelForm
- 3-文件上傳
- 7-session和cookie
- 1-session和cookie
- 8-memcached
- 1-memcached
- 9-阿里云部署
- 阿里云部署