![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg)
## 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-阿里云部署
- 阿里云部署