# 第二节:数据库操作
# 操作数据库
## 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