Python_数据库编程_快速入门

数据库编程

数据库不仅支持各类数据的长期保存,更重要的是支持各种跨平台,跨地域的数据查询、共享和修改,极大方便了认类生活与工作。金融、聊天系统、各类网站、办公自动化系统、各种管理信息系统等,都需要数据库的支持。

在本篇博客中主要介绍SQLite和MySQL数据库的Python接口,并通过几个实例来演示如何通过Python代码实现对数据库的CURD(增删改查)

1. SQLite应用

SQLite是内嵌在Python中的轻量级、基于磁盘文件的数据库管理系统,不需要服务器支持,支持使用SQL语句来访问数据库。该数据库使用C语言开发,支持大多数SQL91标准,支持原子性、一致性、独立性和持久的事务,不支持外键限制;通过数据库级的独占性和共享锁来实现独立事务,当多个线程同时访问同一个数据库并写入数据时,每一时刻只有一个线程可以写入数据。

SQLite支持2TB大小的单个数据库,每个数据库完全存储在单个磁盘文件类,以B+数数据结构的形式存储.一个数据库就是一个文件,通过简单复制即可实现数据库的备份。

访问和操作SQLite数据时,需要首先导入sqlite3模块,然后就可以使用其中的接口来操作数据库了,该模块提供了与DB-API 2.0规范的SQL接口。
Python sqlite3 模块 API

序号 API & 描述
1 sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的链接。您可以使用 “:memory:” 来在 RAM 中打开一个到 database 的数据库连接,而不是在磁盘上打开。如果数据库成功打开,则返回一个连接对象。当一个数据库被多个连接访问,且其中一个修改了数据库,此时 SQLite 数据库被锁定,直到事务提交。timeout 参数表示连接等待锁定的持续时间,直到发生异常断开连接。timeout 参数默认是 5.0(5 秒)。如果给定的数据库名称 filename 不存在,则该调用将创建一个数据库。如果您不想在当前目录中创建数据库,那么您可以指定带有路径的文件名,这样您就能在任意地方创建数据库。
2 connection.cursor([cursorClass]) 该例程创建一个 cursor,将在 Python 数据库编程中用到。该方法接受一个单一的可选的参数 cursorClass。如果提供了该参数,则它必须是一个扩展自 sqlite3.Cursor 的自定义的 cursor 类。
3 cursor.execute(sql [, optional parameters]) 该例程执行一个 SQL 语句。该 SQL 语句可以被参数化(即使用占位符代替 SQL 文本)。sqlite3 模块支持两种类型的占位符:问号和命名占位符(命名样式)。例如:cursor.execute(“insert into people values (?, ?)”, (who, age))
4 connection.execute(sql [, optional parameters]) 该例程是上面执行的由光标(cursor)对象提供的方法的快捷方式,它通过调用光标(cursor)方法创建了一个中间的光标对象,然后通过给定的参数调用光标的 execute 方法。
5 cursor.executemany(sql, seq_of_parameters) 该例程对 seq_of_parameters 中的所有参数或映射执行一个 SQL 命令。
6 connection.executemany(sql[, parameters]) 该例程是一个由调用光标(cursor)方法创建的中间的光标对象的快捷方式,然后通过给定的参数调用光标的 executemany 方法。
7 cursor.executescript(sql_script) 该例程一旦接收到脚本,会执行多个 SQL 语句。它首先执行 COMMIT 语句,然后执行作为参数传入的 SQL 脚本。所有的 SQL 语句应该用分号 ; 分隔。
8 connection.executescript(sql_script) 该例程是一个由调用光标(cursor)方法创建的中间的光标对象的快捷方式,然后通过给定的参数调用光标的 executescript 方法。
9 connection.total_changes() 该例程返回自数据库连接打开以来被修改、插入或删除的数据库总行数。
10 connection.commit() 该方法提交当前的事务。如果您未调用该方法,那么自您上一次调用 commit() 以来所做的任何动作对其他数据库连接来说是不可见的。
11 connection.rollback() 该方法回滚自上一次调用 commit() 以来对数据库所做的更改。
12 connection.close() 该方法关闭数据库连接。请注意,这不会自动调用 commit()。如果您之前未调用 commit() 方法,就直接关闭数据库连接,您所做的所有更改将全部丢失!
13 cursor.fetchone() 该方法获取查询结果集中的下一行,返回一个单一的序列,当没有更多可用的数据时,则返回 None。
14 cursor.fetchmany([size=cursor.arraysize]) 该方法获取查询结果集中的下一行组,返回一个列表。当没有更多的可用的行时,则返回一个空的列表。该方法尝试获取由 size 参数指定的尽可能多的行。
15 cursor.fetchall() 该例程获取查询结果集中所有(剩余)的行,返回一个列表。当没有可用的行时,则返回一个空的列表。

使用该模块,首先需要创建一个与数据库关联的Connection对象

import sqlite3
con = sqlite3.connect('example.db')

成功创建Connection对象之后,再创建一个Cursor对象,并且调用Cursor对象的execute()方法来执行SQL语句创建数据表以及查询、插入、修改或删除数据库中的数据。

c = con.cursor()
# 创建表
c.execute('''CREATE TABLE stocks(date text,trans text,symbol text,qty real,price real)''')
<sqlite3.Cursor at 0x18d7a860180>
# 插入一条记录
c.execute("insert into stocks values('2020-4-12','BUY','RHAT',100,35.14)")
# 提交当前事务,保存数据
con.commit()
# 关闭数据库连接
con.close()

如果需要查询表中内容,如下代码:

import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
for row in c.execute('select * from stocks order by price'):
    print(row)
('2020-4-12', 'BUY', 'RHAT', 100.0, 35.14)

1.1 Connection对象

在各种数据库提供的接口中,Connection对象都是操作数据库中最基本也是最重要的一个类。其主要方法如下表:

方法 说明
Connection.execute(sql[,parameters]) 执行一条SQL语句
Connection.executemany(sql[,parameters]) 执行多条SQL语句
Connection.cursor() 返回连接的游标
Connection.commit() 提交当前事务,如果不提交,那么自上次调用commit()方法之后的所有修改都不会真正保存到数据库中
Connection.rollback() 事务的回滚,即撤销当前事务,将数据库恢复至上次调用commit()方法后的状态
Connection.close() 关闭数据库连接
Connection.create_function(name,num_params,func) 创建可在SQL语句中调用的函数,其中name为函数名,num_params表示该函数可以接收的参数个数,func表示Python可调用对象

下面的代码演示了如何在sqlite3连接中创建并调用自定义函数:

import sqlite3
import hashlib

def md5sum(t):
    return hashlib.md5(t).hexdigest()

conn = sqlite3.connect(":memory:")
conn.create_function("md5",1,md5sum) # 参数1--函数名,参数2--形参个数,参数3--函数本身即可调用对象
cur = conn.cursor()
cur.execute('select md5(?)',(b"foo",)) # 在SQL语句中调用自定义函数,注意,在SQLite数据库没有实际的虚表dual
print(cur.fetchone()[0])
acbd18db4cc2f85cedef654fccc4a4d8

1.2 Cursor对象

Cursor对象其实相当于JDBC中的Statement或PreStatement类

Cursor也是sqlite3模块中比较重要的一个对象,该对象具有如下常用方法。

(1) execute(sql[,parameters])

该方法用于执行一条SQL语句,下面的代码演示了该方法的用法;以及为SQL语句传递参数的两种方法,分别使用问号和命名变量作为占位符。

import sqlite3
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute('create table people (name,age)')
name 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值