周报5

Python操作数据库
l 通过标准库sqlite3操作SQLLite数据库
l 应用扩展库pywin32中win32com模块操作ACCESS数据
l 应用扩展库pywin32 、pyodbc、Pymssql等模块操作
MSSQL数据库
l 应用扩展库MySQLDb模块操作MySQL数据库
l 应用扩展库pymongo完美支持MongoDB数据的操作
数据库操作3
6
36
操作ACCESS数据库-1【
05P36.py】
l 需要首先安装Python for Windows extensions,
Pywin32。
l #建立数据库连接
l import win32com.client
l conn = win32com.client.Dispatch(r'ADODB.Connection')
l DSN ="PROVIDER=Microsoft.ACE.OLEDB.12.0;DATA
SOURCE=D:/Database1.mdb;"
l conn.Open(DSN)
l #打开记录集
l rs = win32com.client.Dispatch(r'ADODB.Recordset')
l rs_name = 'Table1'#表名
l rs.Open('[' + rs_name + ']', conn, 1, 3)
l #操作记录集
l rs.AddNew()
l rs.Fields.Item(1).Value = 'data'
l rs.Update()
l rs.Close()
l
conn.Close()
数据库操作37
3
7
操作ACCESS数据库-2【
05P37.py】
l 操作数据
l conn = win32com.client.Dispatch(r'ADODB.Connection')
l DSN = 'PROVIDER=Microsoft.ACE.OLEDB.12.0;DATA
SOURCE=D:/Database1.mdb;'
l sql_statement = "Insert INTO [Table1] ([Name], [Score])
VALUES ('data1', 72)"
l conn.Open(DSN)
l conn.Execute(sql_statement)
l conn.Close()
l 遍历记录
l rs.MoveFirst()
l count = 0
l while 1:
l if rs.EOF:
l break
l else:
l count = count + 1
l
rs.MoveNext()
数据库操作3
8
3
8
SQLite数据库
l 常用的SQLite可视化管理工具
l www.sqlabs.com==>SQLiteManager
l SQLite Database Browser
数据库操作3
39
9
连接SQLite数据库
l 访问和操作SQLite数据需导入sqlite3模块,创建一个与数据库关
联的Connection对象
l connect(database[, timeout, isolation_level, detect_types,
factory]) :连接数据库文件,也可以连接":memory:"在内存
中创建数据库
l sqlite3.Connection.execute():执行SQL语句
l sqlite3.Connection.cursor():返回游标对象
l sqlite3.Connection.commit():提交事务
l sqlite3.Connection.rollback():回滚事务
l sqlite3.Connection.close():关闭连接
l 创建Cursor对象,Cursor对象方法来执行SQL语句
l close(...):
关闭游标
l execute(...):执行SQL语句
l executemany(...):重复执行多次SQL语句
l executescript(...):一次执行多条SQL语句
l fetchall(...):从结果集中返回所有行记录
l fetchmany(...):
从结果集中返回多行记录
l fetchone(...):从结果集中返回一行记录
数据库操作4
0
4
0
sqlite3连接SQLite数据库并调用自定
义函数
l import sqlite3
l import hashlib
l def md5sum(t):#自定义Python函数
l return hashlib.md5(t).hexdigest()
l conn = sqlite3.connect(":memory:")#在内存中创建临时数据库
l conn.create_function("md5", 1, md5sum)#创建可在SQL调用的
函数,其中第二个参数表示函数的参数个数
l cur = conn.cursor()
l # 在SQL语句中调用自定义函数
l cur.execute("select md5(?)", ["中国河北邢台".encode()])
l print(cur.fetchone()[0])
数据库操作41
4
1
SQLite数据库操作-1【
05P41.py】
l 创建Connection对象后创建Cursor对象,调用Cursor
对象的execute()方法来执行SQL语句创建数据表以及
查询、插入、修改或删除数据库中的数据
l import sqlite3
l conn = sqlite3.connect('test.db')
l c = conn.cursor()
l c.execute("CREATE TABLE stocks (date text, trans text, symbol
text, qty real, price real)")#创建表
l c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY',
'RHAT', 100, 35.14)")#插入一条记录
l for row in c.execute('SELECT * FROM stocks ORDER BY
price'):
print(row)
l conn.commit() #提交当前事务,保存数据
l conn.close() #关闭数据库连接
数据库操作4
42
2
SQLite数据库操作-2【
05P42.py】
l Cursor对象的execute(sql[, parameters]):该方法
用于执行一条SQL语句,下面的代码演示了用法,以
及为SQL语句传递参数的两种方法,分别使用问号和
命名变量作为占位符
l import sqlite3
l conn = sqlite3.connect(":memory:")
l cur = conn.cursor()
l cur.execute("CREATE TABLE people (name_last, age)")
l who = "Dong"
l age = 38
l cur.execute("INSERT INTO people VALUES (?, ?)", (who,
age))# 使用问号作为占位符
l cur.execute("SELECT * FROM people WHERE
name_last=:who AND age=:age", {"who": who, "age": age})#
使用命名变量作为占位符
l print(cur.fetchone())
数据库操作4
3
4
3
executemany应用迭代参数序列操作
SQLite数据库【
05P43.py】
l executemany(sql, seq_of_parameters):该方法用来对于所有给定
参数执行同一个SQL语句,参数序列可使用使用迭代来产生
l import sqlite3
l class IterChars:# 自定义迭代器,按顺序生成小写字母
l def __init__(self):
l self.count = ord('a')
l def __iter__(self):
l return self
l def __next__(self):
l if self.count > ord('z'):
l raise StopIteration
l self.count += 1
l return (chr(self.count - 1),)
l conn = sqlite3.connect(":memory:")
l cur = conn.cursor()
l cur.execute("CREATE TABLE characters(c)")
l theIter = IterChars()#创建迭代器对象
l cur.executemany("INSERT INTO characters(c) VALUES (?)", theIter)#
插入记录,每次插入一个英文小写字母
l
cu
r
.e
x
e
c
u
t
e
(
"
S
E
L
E
CT c FROM characters")# 读取并显示所有记录
l
p
ri
n
t
(c
u
r
.f
e
t
c
h
a
ll
()
)
数据库操作4
4
44
executemany应用生成器参数序列操
作SQLite数据库【
05P44.py】
l executemany(sql, seq_of_parameters):该方法用来对
于所有给定参数执行同一个SQL语句,参数序列可使
用使用生成器对象来产生
l import sqlite3
l import string
l def char_generator():#包含yield的函数可用来创建生成器对象
l for c in string.ascii_lowercase:
l yield (c,)
l conn = sqlite3.connect(":memory:")
l cur = conn.cursor()
l cur.execute("CREATE TABLE characters(c)")
l cur.executemany("INSERT INTO characters(c) VALUES (?)",
char_generator())#使用生成器对象得到参数序列
l cur.execute("SELECT c FROM characters")
l print(cur.fetchall())
数据库操作4
5
4
5
executemany应用直接创建的参数序
列操作SQLite数据库【
05P45.py】
l executemany(sql, seq_of_parameters):该方法用来对
于所有给定参数执行同一个SQL语句,参数序列可以
使用直接创建的序列
l import sqlite3
l persons = [("Hugo", "Boss"), ("Calvin", "Klein") ]
l conn = sqlite3.connect(":memory:")
l conn.execute("CREATE TABLE person(firstname, lastname)")#
创建表
l conn.executemany("INSERT INTO person(firstname, lastname)
VALUES (?, ?)", persons)#插入数据
l for row in conn.execute("SELECT firstname, lastname FROM
person"):#显示数据
l print(row)
l print("I just deleted", conn.execute("DELETE FROM
person").rowcount, "rows")
数据库操作
posted @ 2022-04-03 17:07  我的未来姓栗山  阅读(28)  评论(0编辑  收藏  举报