Python 操作数据库

您所在的位置:网站首页 python数据库开发教程 Python 操作数据库

Python 操作数据库

2023-07-31 00:44| 来源: 网络整理| 查看: 265

作者:billy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

数据库编程接口

在项目开发中,数据库应用必不可少。虽然数据库的种类有很多,如 SQLite、MySQL、Oracle 等等,但是它们的功能基本都是一样的,为了对数据库进行统一的操作,大多数语言都提供了简单的、标准化的数据库接口(API)。在 Python Database API 2.0 规范中,定义了 Python 数据库 API 接口的各个部分,如模块接口、连接对象、游标对象、类型对象和构造器、DB API 的可选扩展以及可选的错误处理机制等等。

在 Python 中,可以通过数据库模块的 connect() 函数获取数据库连接对象(Connection Object),该对象主要提供获取数据库游标对象和提交/回滚事务的方法,以及关闭数据库连接。

connect() 函数常用的参数及说明,请参考下表:

参数说明dsn数据源名称,给出该参数表示数据库依赖user用户名password用户密码host主机名database数据库名称

connect() 函数返回的连接对象,有以下常用方法:

方法名说明close()关闭数据库连接commit()提交事务rollback()回滚事务cursor()获取游标对象,操作数据库,如执行 DML 操作、调用存储过程等

游标对象(Cursor Object)代表数据库中的游标,用于指示抓取数据库操作的上下文。主要提供执行 SQL 语句、调用存储过程、获取查询结果等方法。游标对象的常用方法如下表所示:

方法名说明callproc(procname, [, parameters])调用存储过程,需要数据库支持close()关闭当前游标execute(operation[, parameters])执行数据库操作,SQL 语句或者数据库命令executemany(operation, seq_of_params)用于批量操作,如批量更新fetchone()获取查询结果集中的下一条记录fetchmany(size)获取指定数量的记录fetchall()获取结果集的所有记录nextset()跳至下一个可用的结果集arraysize指定使用 fetchmany() 获取的行数,默认为 1setinputsizes(sizes)设置在调用 execute*() 方法时分配的内存区域大小setoutputsize(sizes)设置列缓冲区大小,对大数据列如 LONGS 和 BLOBS 尤其有用 使用 SQLite

与许多其他数据库管理系统不同,SQLite 不是一个客户端/服务器结构的数据库引擎,而是一种嵌入式数据库,它的数据库就是一个文件。SQLite 将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。由于 SQLite 本身使用 C 语言写的,而且体积很小,所以经常被集成到各种应用程序中。Python 就内置了 SQLite3,所以在 Python 中使用 SQLite 不需要安装任何模块,直接使用。

操作数据库流程如下:

Created with Raphaël 2.2.0 开始 创建 connection 获取 cursor 执行 SQL 语句,处理数据结果 关闭 cursor 关闭 connection 结束

示例1:

import sqlite3 # 导入 SQLite 数据库 # 连接数据库文件 demo.db,如果文件不存在,会自动在当前目录创建 conn = sqlite3.connect('demo.db') # 获取游标 cursor = conn.cursor() # 创建表 user cursor.execute('create table user(id int(10) primary key, name varchar(20))') # 向表 user 中插入数据 cursor.execute('insert into user(id, name) values ("1", "Billy")') cursor.execute('insert into user(id, name) values ("2", "Kitty")') cursor.execute('insert into user(id, name) values ("3", "Alice")') # 关闭游标 cursor.close() # 提交事务 conn.commit() # 断开连接 conn.close()

示例2:

import sqlite3 conn = sqlite3.connect('demo.db') cursor = conn.cursor() cursor.execute('select * from user') result = cursor.fetchone() print(result) cursor.execute('select * from user where id > 1') result = cursor.fetchall() print(result) cursor.execute('update user set name = ? where id = ?', ("Miss", 3)) cursor.execute('select * from user') result = cursor.fetchall() print(result) cursor.execute('delete from user where id = ?', (2, )) cursor.execute('select * from user') result = cursor.fetchall() print(result) cursor.close() conn.commit() conn.close()

上述例子的运行结果为:

(1, 'Billy') [(2, 'Kitty'), (3, 'Alice')] [(1, 'Billy'), (2, 'Kitty'), (3, 'Miss')] [(1, 'Billy'), (3, 'Miss')] 下载并配置 MySQL

MySQL 是一款开源的数据库软件,由于其免费特性得到了全世界用户的喜爱,是目前使用人数最多的数据库,在使用前需要先下载安装。

下载地址1:官网下载

在这里插入图片描述

下载地址2:网盘下载 提取码:l4f2

下载、解压缩完成之后,需要配置环境变量 在这里插入图片描述

配置完环境变量之后,在 D:\mysql\mysql-8.0.21-winx64 目录下新增加一个配置文件 mysql.ini ,同时在 bin 的同级目录下创建一个 data 文件夹(用于存放数据库数据)

在这里插入图片描述 mysql.ini 的内容如下

[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=D:\mysql\mysql-8.0.21-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:\mysql\mysql-8.0.21-winx64\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB

在这里插入图片描述 初始化数据库:mysqld --initialize-insecure --user=mysql 安装 mysql:mysqld install 启动服务:net start mysql 以管理员身份登录 mysql:mysql -u root -p 默认密码为空,直接回车即可 修改管理员密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; 刷新权限:FLUSH PRIVILEGES;

在这里插入图片描述

至此大功告成,可以使用 Navicat for MySQL 操作数据库了

下载并安装 Navicat for MySQL 下载地址:网盘下载 提取码:7q8u

在这里插入图片描述

在 Python 中使用 MySQL

由于 MySQL 服务器以独立的进程运行,并通过网络对外服务,所以,需要支持 Python 的 MySQL 驱动来连接到 MySQL 服务器。在 Python 中支持 MySQL 的数据库模块有很多,我们选择使用 PyMySQL。

cmd -> 右键以管理员身份运行命令提示符,输入以下命令: pip3 install PyMySQL

如果安装失败,可以在后面添加镜像路径: pip3 install PyMySQL -i https://pypi.douban.com/simple

示例:

import pymysql # 打开数据库,参数依次为:主机名/IP,用户名,密码,数据库名,字符集 db = pymysql.connect("localhost", "root", "123456", "python", charset='utf8') # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL 查询 cursor.execute("select version()") # 使用 fetchone() 方法获取单条数据 data = cursor.fetchone() print("Datebase version : %s " % data) # 输出 Datebase version : 8.0.21 # 如果表 books 存在,则删除表 cursor.execute("DROP TABLE IF EXISTS books") # 使用与处理语句创建表 sql = """ CREATE TABLE books ( id int(8) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, category varchar(50) NOT NULL, price decimal(10,2) DEFAULT NULL, publish_time date DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; """ # 执行 SQL 语句 cursor.execute(sql) # 数据列表 data = [("Python 深度解析", 'Python', '79.80', '2018-5-20'), ("零基础学 Python", 'Python', '69.80', '2018-6-18'), ("PHP 项目开发实战入门", 'PHP', '79.80', '2016-5-21'), ("Java 从入门到精通", 'Java', '69.80', '2017-5-21')] try: # 执行 SQL 语句,插入多条数据 cursor.executemany("insert into books(name, category, price, publish_time) values (%s, %s, %s, %s)", data) # 提交数据 db.commit() except: # 发生错误时回滚 db.rollback() # 关闭数据库连接 db.close()

在这里插入图片描述

更多请参考 Python 进阶之路


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3