整体文章目录
一、 当前章节目录
二、数据库简介
数据库功能:
- 数据定义功能。
- DBMS提供相应数据语言来定义数据库结构
- DDL通常包括对每个对象的创建、修改以及删除命令。
- 数据操纵功能。
- DBMS提供数据操纵语言,实现对数据库数据的基本操作。
- DML通常包括对数据的增加、删除、修改以及查询命令。
- 数据库的管理和维护功能。
- 数据的安全性、完整性和并发控制。
- 数据库初始数据的装入。
- 数据库的转储、恢复、重组织。
- 系统性能监视、分析等功能。
数据库类型:
- 关系型数据库:Oracle、MySQL、Microsoft SQL Server
- 非关系型数据库:NoSQL、MongoDB、Redis、HBase
三、Python DATABASE API简介
- Python访问数据库的具体步骤
- 导入相应数据库的第三方模块。如访问Oracle数据库的专用模块cx_Oracle、访问MySQL数据库的专用模块pymysql、访问SQL Server数据库的专用模块pymssql、Python自带的SQLite3模块
- 调用connect()创建数据库连接,返回连接对象conn
- 调用conn.execute()方法创建表结构并插入数据。如果设置了手动提交,需要调用conn.commit()提交插入或修改的数据。
- 调用conn.cursor()方法返回游标对象cur,通过cur.execute()方法查询数据库。
- 调用cur.fetchall()、cur.fetchmany()或cur.fetchone()返回查询结果。
- 关闭cur和conn。
- 数据库连接对象
- host:数据库主机名
- user:数据库登录名
- passwd:数据库登陆的密码
- DATABASE:要使用的数据库名
- port:MySQL服务使用的TCP端口等
- 游标对象
四、Python连接数据库的专用模块
4.1 数据库专业模块的下载与安装
4.2 Python连接Oracle数据库
import cx_oracle # 导入cx_Oracle模块
connection = cx_oracle.connect("system", "123", "orcl") # 连接Oracle数据库
cursor = connection.cursor() # 获取cursor对象操作数据库
sql = """select empname 姓名, emptel 电话, sal 薪水, deptname 部门 # 定义sql查询语句
from emp e, dept d
where sal > 2500
and e.deptno = d.deptno
order by sal"""
cursor.execute(sql) # 执行sql语句
for x in cursor.fetchall(): # 外循环获取所有数据
for value in x: # 内输出每一行数据
print(value, end=' ')
print() # 换行
cursor.close() # 关闭游标
connection.close() # 关闭连接
4.3 Python连接MySQL数据库
import sys # 导入sys模块
import pymysql # 导入pymysql模块
try: # 捕获异常
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='a',
db='mysql', charset='utf8') # 打开数据库连接
except Exception as e: # 异常处理
print(e) # 打印异常信息
sys.exit() # 中断连接
cursor = conn.cursor() # 使用cursor()方法创建一个游标对象cursor
# 向teacherinfo表中插入数据
sql_insert = "insert into teacherinfo(t_id, t_name, t_sex, t_pro, t_tel)values(%s, %s, %s, %s, %s)"
values = (("1113", "张海", '男', '讲师', '13891234456'), ("1114", "廖明", '女', '教授', '13891232222'))
try: # 捕获异常
cursor.executemany(sql_insert, values) # 插入多条数据
except Exception as e: # 异常处理
print(e) # 打印异常信息
sql = "select t_id, t_name, t_sex, t_pro, t_tel from teacherinfo" # 定义SQL查询
cursor.execute(sql) # 使用execute()方法执行SQL查询
print(cursor.rowcount) # 打印游标获取的行数
for d in cursor.fetchall(): # 外循环获取所有数据
for value in d: # 内循环输出每一行数据
print(value, end=' ')
print() # 换行
cursor.close() # 关闭游标
conn.close() # 关闭连接
运行结果:
4.4 Python连接SQL Server数据库
import pymssql # 导入pymssql模块
connection = pymssql.connect(host='127.0.0.1', user='root',password='123', database='mysql') #连接SQL Server数据库
cursor = connection.cursor() # 获取cursor对象操作数据库
sql = """select stcode 学号, stname 姓名, staddress 地址, class 班级, major 专业 from
studentinfo where major='计算机系' and class='一班'""" # 定义sql查询语句
cursor.execute(sql) # 执行sql查询语句
for d in cursor.fetchall(): # 外循环获取所有数据
for value in d: # 内循环输出每一行数据
print(value, end=' ')
print() # 换行
cursor.close() # 关闭游标
connection.close() # 关闭连接
4.5 Python连接SQLite数据库
import sqlite3
# 连接数据库
conn = sqlite3.connect("D:\python例题源代码\ch10code/schoolmanage.db")
# 创建表
conn.execute("create table courseinfo(c_id char(10)primary key, c_name varchar(20) "
"not null, c_press varchar(50) not null, c_price float not null")
# 插入数据
conn.execute("insert into courseinfo(c_id, c_name, c_press, c_price)values('1001',"
"'Python开发','人民邮电出版社', 69")
conn.execute("insert into courseinfo(c_id, c_name, c_press, c_price)values('1002',"
"'Java开发','机械工业出版社', 60")
conn.commit() # 手动提交数据
cur = conn.cursor() # 获取游标对象
cur.execute("select * from courseinfo") # 使用游标查询数据
res = cur.fetchall() # 获取所有结果
print("courseinfo: ", res) # 输出所有课程信息
for line in res: # 通过循环遍历输出结果集对象res
for f in line:
print(f, end=" ")
print() # 换行
cur.close() # 关闭游标
conn.close() # 关闭连接
五、使用Python的持久化模块读写数据
import shelve # 导入shelve模块
addresses = shelve.open('addresses') # 打开或创建数据库
addresses['1'] = ['Tom', 'Beijing road', '2008-01-03'] # 插入数据
addresses['2'] = ['Jerry', 'Shanghai road', '2008-03-30'] # 插入数据
if '2' in addresses: # 判断关键字“2”是否在addresses中
del addresses['2'] # 删除关键字“2”对应的数据
for a in addresses.items(): # 循环遍历输出addresses对象的内容
print(a)
addresses.close() # 关闭连接