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

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. myEclipse 8.5下SVN环境的搭建

    myEclipse 8.5下SVN环境的搭建 在应用myEclips 8.5做项目时,svn会成为团队项目的一个非常好的工具,苦苦在网上寻求了一下午,终于整合好了这个环境,在这里简单介绍下,希望能为刚 ...

  2. 关于bool和BOOL的区别

    1.类型不同: BOOL是int类型,bool是布尔类型 2.长度不同: BOOL长度是其环境来定,一般是4个字节,因为其是int类型;bool长度为一个字节 3.取值不同: BOOL取值是FALSE ...

  3. 函数之DisString

    DocStringsPython有一个很奇妙的特性,称为 文档字符串 ,它通常被简称为 docstrings .DocStrings是一个重要的工具,由于它帮助你的程序文档更加简单易懂,你应该尽量使用 ...

  4. 解决phpcms V9缩略图模糊的方法

    解决V9缩略图模糊/libs/classes/image.class.php注释掉else   imagecopyresized($thumbimg, $srcimg, 0, 0, $psrc_x,  ...

  5. PHP PSR 代码风格

    FIG组织在制定跟PHP相关规范,简称PSR,PSR旨在通过讨论我们代码项目的共同点以找出一个协作编程的方法. 什么是psr0 强调自动加载的方式 下文描述了若要使用一个通用的自动加载器(autolo ...

  6. 批量删除ASP.NET中的缓存(cache)

    IDictionaryEnumerator em = HttpContext.Current.Cache.GetEnumerator(); while (em.MoveNext())        { ...

  7. 《算法导论》插入排序----InsertSort

    算法导论,插入排序 public class InsertSort { public static double [] sort(double [] num) { for(int i =1; i< ...

  8. php包管理工具最基本的一些问题

    windows下的 1.先安装windows下的set-up程序 点击一步步的, cmd进入,输入composer能成功显示一幅图说明安装成功 2.在下载,https://getcomposer.or ...

  9. docker网络访问(三)

    docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPor ...

  10. java系列--JDBC连接oracle

    <oracle开发实战经典><oracle DBA从入门到精通> JDBC连接数据库 JNDI连接池 oracle.jdbc.driver.OracleDriver 其实就是一 ...