实际开发中,我们会经常用到数据库。

Python里对数据库的操作API都很统一。

SQLite

SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。

Python内置了sqlite3。

#coding:utf-8
import sqlite3 conn = sqlite3.connect('test.db')
cursor = conn.cursor() # sqlite创建表时,若id为INTEGER类型且为主键,可以自动递增,在插入数据时id填NULL即可
# cursor.execute('create table user(id integer primary key, name varchar(25))') #执行一次 # 插入一条数据
cursor.execute('insert into user(id,name)values(NULL,"yjc")') # 返回影响的行数
print(cursor.rowcount) #提交事务,否则上述SQL不会提交执行
conn.commit() # 执行查询
cursor.execute('select * from user') # 获取查询结果
print(cursor.fetchall()) # 关闭游标和连接
cursor.close()
conn.close()

输出:

1
[(1, 'yjc'), (2, 'yjc')]

我们发现Python里封装的数据库操作很简单:

1、获取连接conn;

2、获取游标cursor;

3、使用cursor.execute()执行SQL语句;

4、使用cursor.rowcount返回执行insert,update,delete语句受影响的行数;

5、使用cursor.fetchall()获取查询的结果集。结果集是一个list,每个元素都是一个tuple,对应一行记录;

6、关闭游标和连接。

如果SQL语句带有参数,那么需要把参数按照位置传递给cursor.execute()方法,有几个?占位符就必须对应几个参数,示例:

cursor.execute('select * from user where name=? ', ['abc'])

为了能在出错的情况下也关闭掉Connection对象和Cursor对象,建议实际项目里使用try:...except:...finally:...结构。

MySQL

MySQL是最流行的关系数据库。

SQLite的特点是轻量级、可嵌入,但不能承受高并发访问,适合桌面和移动应用。而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也远远大于SQLite。

使用需要先安装MySQL:https://dev.mysql.com/downloads/mysql/

Windows版本安装时注意选择UTF-8编码,以便正确地处理中文。

MySQL的配置文件是my.ini,Linux一般位于/etc/my.cnf。配置里需要设置编码为utf-8。配置示例:

[client]
default-character-set = utf8 [mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci

Python并未内置MySQL的驱动。需要先安装:

$ pip3 install mysql-connector

Collecting mysql-connector
Downloading mysql-connector-2.1.4.zip (355kB)
100% |████████████████████████████████| 358kB 355kB/s
Building wheels for collected packages: mysql-connector
Running setup.py bdist_wheel for mysql-connector ... done
Successfully built mysql-connector
Installing collected packages: mysql-connector
Successfully installed mysql-connector-2.1.4

Python使用MySQL示例:

# coding: utf-8
import mysql.connector conn = mysql.connector.connect(user='root', password='123456', database='test') cursor = conn.cursor() cursor.execute("insert into user(id,name,age)values(null,'python', 20)")
print(cursor.rowcount)
conn.commit() cursor.execute("select * from user order by id desc limit 3")
print(cursor.fetchall()) cursor.close()
conn.close

输出:

1
[(25, 'python', 1, 20, 1), (24, 'python', 1, 20, 1), (23, 't2', 2, 23, 1)]

如果SQL语句带有参数,那么需要把参数按照位置传递给cursor.execute()方法,MySQL的占位符是%s,示例:

cursor.execute('select * from user where name=%s and age=%s', ['python', 20])

由于Python的DB-API定义都是通用的,所以,操作MySQL的数据库代码和SQLite类似。

Python学习--17 访问数据库的更多相关文章

  1. python学习(22) 访问数据库

    原文链接:http://www.limerence2017.com/2018/01/11/python22/ 本文介绍python如何使用数据库方面的知识. SQLite SQLite是一种嵌入式数据 ...

  2. Python中级 —— 05访问数据库

    ** 写在前面 ------------------> ** 廖雪峰 菜鸟 数据库类别 首先选择一个关系数据库.目前广泛使用的关系数据库也就这么几种: 付费的商用数据库: Oracle:典型的高 ...

  3. Python学习笔记 使用数据库SQlite Mysql

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用当中, 甚至在IOS和Android的APP中都可以集成 Python就内 ...

  4. python学习笔记——mongodb数据库

    1 概述 1.1 文件管理阶段 优点:可以长期保存 能存储大量数据 缺点:没有结构化的组织 查找不方便 数据容易冗余 1.2 数据库管理阶段 有文件存储的优点,同时解决了文件存储的问题 缺点 : 操作 ...

  5. Python学习笔记020——数据库基本操作

    本数据库的操作是Linux虚拟机平台下进行的 1 启动和链接MySQL服务 1.1 服务端 (1)查看服务状态 sudo /etc/init.d/mysql stauts (2)启动服务端 sudo ...

  6. Python学习笔记020——数据库知识概述

    数据库概述 1 提供数据库的软件都有哪些 MySQL.SQL_Server.Oracle.DB2.Mariadb.MongoDB ... (1)是否开源 开源软件:MySQL.Mariadb.Mong ...

  7. 10 python学习笔记-操作数据库(十)

    在功能.接口测试中,常常需要通过数据库的操作,来准备数据.检测环境及核对功能.接口的数据库操作是否正确. 在自动化测试中,就需要我们用代码连接数据库自动完成数据准备. 环境检查及数据库断言的功能.数据 ...

  8. Python学习--17 进程和线程

    线程是最小的执行单元,而进程由至少一个线程组成.如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间. 进程 fork调用 通过fork()系统调用,就可以生成一个子进程 ...

  9. 《转》Python学习(17)-python函数基础部分

    http://www.cnblogs.com/BeginMan/p/3171977.html 一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/arch ...

随机推荐

  1. 6种炫酷的CSS3按钮边框动画特效

    6种炫酷的CSS3按钮边框动画特效Button border animate 用鼠标滑过下面的按钮看看效果! Draw Draw Meet Center Spin Spin Circle Spin T ...

  2. new sun.misc.BASE64Encoder()报错找不到jar包

    解决方案1(推荐): 只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了. 解决方案2: W ...

  3. iOS开发——刮奖

    还是直接上代码,有什么问题的话,直接评论. 1.在YYTScratchView.h文件中 // //  YYTScratchView.h //  Demo-刮奖 // //  Created by y ...

  4. LPC1768基本输入输出GPIO使用

    LPC1788通用IO口的控制包含了一些基本的组件,比如设置推挽输出,开漏输出,上拉电阻等,我们今天来看看. 首先使用GPIO要打开GPIO的系统时钟   LPC_SC->PCONP |= (1 ...

  5. 浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

    1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...

  6. js获取前之前或之后的日期

    function fun_date(aa){ var date1 = new Date(), time1=date1.getFullYear()+"-"+(date1.getMon ...

  7. linux与windows回车换行符的区别

    转自:http://www.cnblogs.com/dartagnan/archive/2010/12/14/2003499.html “回车”(carriage return)VS  “换行”(li ...

  8. php 利用socket上传文件

    php 利用socket上传文件 张映 发表于 2010-06-02 分类目录: php 一,利用fsockopen来上传文件 以前我写过一篇关于socket通信原理的博文http://blog.51 ...

  9. css--position和float

    1.元素设置position:relative或者position:absolute后,才能激活left,top,right,bottom和z-index属性,默认情况下这些属性并未激活,设置了也会无 ...

  10. input 框上传多个文件

    在input标签中加入 multiple 属性,可以在一个输入框中选择多个文件进行上传 <input type="file" name="img" mul ...