引入python中的一些依赖库,用于连接常用的数据库。
SQLite3是Python内置的数据库模块,适合小型应用程序和快速原型开发。
SQLite 是一个进程内库,它实现了一个自给自足、无服务器、非常小型、轻量级、事务性 SQL 数据库引擎。它是一个零配置数据库,不需要在系统中进行配置。
导入sqlite3
#连接数据库(创建新数据库)
conn = sqlite3.connect("mydatabase.db")
#创建表
光标 = conn.cursor()
cursor.execute("如果不存在则创建表用户(id INTEGER PRIMARY KEY,名称 TEXT,年龄 INTEGER)")
#插入数据
光标.execute(“插入用户(姓名,年龄)值(?,?)”,(“爱丽丝”,25))
光标.execute(“插入用户(姓名,年龄)值(?,?)”,(“鲍勃”,30))
# 查询数据
光标.execute("从用户中选择*")
行=游标.fetchall()
for row in rows: # row 是元组类型
打印(行)
# 关闭连接
conn.close()
# 输出
(1,“爱丽丝”,25)
(2,“鲍勃”,30)
导入csv,sqlite3
# 连接数据库(以SQLite3为例)
conn = sqlite3.connect("mydatabase.db")
光标 = conn.cursor()
#创建数据表cursor.execute(“如果不存在书籍则创建表(id INTEGER PRIMARY KEY,标题文本,作者文本)”)
# 从CSV文件中读取数据
打开(“books.csv”,“r”,encoding='utf-8')作为文件:
读者 = csv.reader(文件)
next(reader) # 跳过标题行
对于读卡器中的行:
标题、作者 = 行
cursor.execute("INSERT INTO books (书名,作者) VALUES (?, ?)", (书名,作者))
# 查询数据
光标.execute("从书籍中选择*")
行=游标.fetchall()
对于行中的行:
打印(行)
# 关闭连接
conn.close()
# 输出
(1、《三体》、《刘慈欣》)
(2、《呐喊》、《鲁迅》)
MySQL Connector是连接MySQL数据库的官方驱动,适用于中小型应用和生产环境。
pip 安装 mysql-connector-python
#注意:不要将文件命名为mysql,否则你会挣扎一段时间。
导入 mysql.connector
# 连接数据库
conn = mysql.connector.connect(
主机=“本地主机”,
用户=“根”,
密码=“root”,
数据库=“sqllit”
)
#创建表
光标 = conn.cursor()cursor.execute("如果不存在则创建表用户(id INT AUTO_INCRMENT PRIMARY KEY, name VARCHAR(255),age INT)")
#插入数据
光标.execute(“插入用户(姓名,年龄)值(%s,%s)”,(“爱丽丝”,25))
光标.execute(“插入用户(姓名,年龄)值(%s,%s)”,(“鲍勃”,30))
# 查询数据
光标.execute("从用户中选择*")
行=游标.fetchall()
对于行中的行:
打印(行)
# 关闭连接
conn.close()
# 输出
(1,“爱丽丝”,25)
(2,“鲍勃”,30)
注意,SQLit 和 MySQL 中cursor.execute
的区别:
# SQLit,在这里?类似于占位符
光标.execute(“插入用户(姓名,年龄)值(?,?)”,(“爱丽丝”,25))
光标.execute(“插入用户(姓名,年龄)值(?,?)”,(“鲍勃”,30))
#MySQL
光标.execute(“插入用户(姓名,年龄)值(%s,%s)”,(“爱丽丝”,25))
光标.execute(“插入用户(姓名,年龄)值(%s,%s)”,(“鲍勃”,30))
PYODBC是PYTHON的开源包,用于通过ODBC连接数据库。
pip 安装 pyodbc
导入pyodbc
# 连接数据库(无需配置数据源),connect()函数创建并返回一个Connection对象
cnxn = pyodbc.connect(r'DRIVER={Microsoft Access 驱动程序(*.mdb, *.accdb)};DBQ=D:\\work\\test\\sql\\test.mdb')
#cursor() 使用此连接创建(并返回)游标或类似游标的对象
crsr = cnxn.cursor()
#打印数据库中所有表的表名
对于 crsr.tables(tableType='TABLE') 中的 table_info:
print(表信息.表名称)
cnxn.close()
导入pyodbc
# 连接数据库(无需配置数据源),connect()函数创建并返回一个Connection对象
cnxn = pyodbc.connect("""DRIVER={MySQL ODBC 8.1 Unicode 驱动程序};
服务器=本地主机;数据库=sqllit;用户=根;密码=根;“””
)
#cursor() 使用此连接创建(并返回)游标或类似游标的对象
crsr = cnxn.cursor()
#打印数据库中所有表的表名
对于 crsr.tables(tableType='TABLE') 中的 table_info:
print(表信息.表名称)
cnxn.close()
导入pyodbc
# 必须安装驱动程序,驱动程序名称可以从计算机ODBC数据源中找到。
cn = pyodbc.connect('DRIVER={用于 SQL Server 的 ODBC 驱动程序 17};SERVER=localhost;DATABASE=testdb;UID=me;PWD=pass')# 建立连接
光标 = cn.cursor()
#执行SQL
cursor.execute("从用户中选择user_id, user_name")
# 输出结果
行=游标.fetchall()
对于行中的行:
print(行.用户id, 行.用户名)
cn.close()
PyPyODBC是一个Python ODBC库,它可以看作是著名的PyODBC库的纯Python实现,它们的用法几乎完全相同。
基于纯Python代码的特性给PyPyODBC库带来了极大的兼容性、嵌入性和代码可移植性:PyPyODBC可以运行在CPython、IronPython和PyPy虚拟机下,并且可以运行在Windows和Linux平台下。它可以运行在Python 2.4、2.5、2.6、2.7等版本下,并且可以嵌入到项目中,无需在运行环境中额外编译和安装ODBC模块。
特点:
简单轻量:PyPyODBC库只有一个Python脚本文件,代码不超过3000行。您可以轻松地将其嵌入到您的项目中。
内置Access MDB支持:在Windows平台上,PyPyODBC可以自行创建Access数据库,无需安装Microsoft Office套件。
下载
pip 安装 pypyodbc
连接访问
导入pypyodbc
# 连接数据库(无需配置数据源),connect()函数创建并返回一个Connection对象
cnxn = pypyodbc.connect(r'DRIVER={Microsoft Access 驱动程序(*.mdb, *.accdb)};DBQ=D:\\work\\test\\sql\\test.mdb')
#cursor() 使用此连接创建(并返回)游标或类似游标的对象crsr = cnxn.cursor()
#打印数据库中所有表的表名
对于 crsr.tables(tableType='TABLE') 中的 table_info:
打印(表信息[2])
cnxn.close()
连接到MySQL
导入pypyodbc
# 连接数据库(需要安装驱动,驱动名称是从OBDC数据源中找到的),connect()函数创建并返回一个Connection对象
cnxn = pypyodbc.connect("""DRIVER={MySQL ODBC 8.1 Unicode 驱动程序};
服务器=本地主机;数据库=sqllit;用户=根;密码=根;“””
)
#cursor() 使用此连接创建(并返回)游标或类似游标的对象
crsr = cnxn.cursor()
sql = '从admin_user中选择*'
# 查询数据
crsr.执行(sql)
行= crsr.fetchall()
对于行中的行:
打印(行)
cnxn.close()
pymysql 是一个用纯 Python 实现的 MySQL 客户端操作库。
pip3 安装 PyMySQL
导入pymysql
#打开数据库连接
db = pymysql.connect(主机='localhost',
用户='root',
密码='root',
数据库='sqllit')
# 使用cursor()方法创建游标对象cursor
光标 = db.cursor()# 使用execute()方法执行SQL,如果表存在则删除该表
光标.execute("如果存在员工则删除表")
# 使用准备好的语句创建表
sql =“”“创建表员工(
FIRST_NAME CHAR(20) NOT NULL,
姓氏字符(20),
年龄INT,
性别字符(1),
浮动收入)"""
游标.执行(sql)
#SQL插入语句
sql1 =“”“插入员工(名字,
姓氏、年龄、性别、收入)
值('Mac1'、'Mohan1'、201、'M'、20001)"""
#SQL插入语句
sql2 =“插入员工(名字,\
姓氏、年龄、性别、收入)\
值('%s'、'%s'、%s、'%s'、%s)" % \
(“麦克”,“莫汉”,20,“N”,2000)
尝试:
#执行sql语句
游标.执行(sql1)
游标.执行(sql2)
# 提交到数据库执行
db.commit()
除了:
# 如果发生错误则回滚
db.rollback()
# 查询数据
光标.execute("从员工中选择 *")
行=游标.fetchall()
对于行中的行:
打印(行)
#关闭数据库连接
db.close()
# 输出
('Mac1', '莫汉1', 201, 'M', 20001.0)('麦克','莫汉',20,'N',2000.0)
SQLAlchemy是Python中最流行的ORM(对象关系映射)框架,适合复杂的数据库操作和应用,可以连接SQlit和MySQL数据库。
ORM的全称是Object Relational Mapping
,翻译为对象关系映射
。简单来说,ORM在数据库中的表和面向对象语言中的类之间建立了对应关系。如果我们要操作数据库,可以直接通过操作类或类实例来完成数据库中的一张表或者表中的一条记录。 ORM相当于给你一个数据库的实例。
pip 安装 sqlalchemy
来自 sqlalchemy 导入 create_engine、列、整数、字符串
从 sqlalchemy.ext.declarative 导入 declarative_base
从 sqlalchemy.orm 导入 sessionmaker
# 连接到 SQLit 数据库
引擎 = create_engine("sqlite:///mydatabase.db", echo=True)
# 连接MySQL数据库
引擎 = create_engine('mysql+pymysql://root:root@localhost:3306/sqllit?charset=utf8')
基础=声明性_基础()
#定义数据表模型
用户类(基础):
__表名__ =“用户”
id = 列(整数,primary_key=True)
名称 = 列(字符串)
年龄 = 列(整数)
#创建数据表
Base.metadata.create_all(引擎)# 创建会话
会话= sessionmaker(绑定=引擎)
会话=会话()
# 插入数据
user1 = 用户(姓名=“爱丽丝”,年龄=25)
user2 = 用户(姓名=“鲍勃”,年龄=30)
session.add_all([用户1, 用户2])
会话.commit()
# 查询数据
用户 = session.query(User).all()
对于用户中的用户:
print(用户名,用户年龄)
# 关闭会话
会话.close()
# 输出
D:\work\test\sql\www.sychzs.cn:7: MovedIn20Warning: ``declarative_base()`` 函数现在可用作 sqlalchemy.orm.declarative_base()。 (自 2.0 起已弃用)(SQLAlchemy 2.0 的背景位于:https://www.sychzs.cn/e/b8d9)
基础=声明性_基础()
2023-09-16 20:37:26,110 信息 sqlalchemy.engine.Engine 开始(隐式)
2023-09-16 20:37:26,110 信息 sqlalchemy.engine.Engine PRAGMA main.table_info("users")
2023-09-16 20:37:26,110 信息 sqlalchemy.engine.Engine [原始 sql] ()
2023-09-16 20:37:26,111 信息 sqlalchemy.engine.Engine 提交
2023-09-16 20:37:26,112 信息 sqlalchemy.engine.Engine 开始(隐式)2023-09-16 20:37:26,114 信息 sqlalchemy.engine.Engine 插入用户(姓名、年龄)值(?、?)返回 id
2023-09-16 20:37:26,114 INFO sqlalchemy.engine.Engine [在 0.00009 秒内生成(插入许多值)1/2(已排序;不支持批量)]('Alice',25)
2023-09-16 20:37:26,120 信息 sqlalchemy.engine.Engine 插入用户(姓名、年龄)值(?、?)返回 id
2023-09-16 20:37:26,120 INFO sqlalchemy.engine.Engine [insertmanyvalues 2/2(已排序;不支持批量)] ('Bob', 30)
2023-09-16 20:37:26,122 信息 sqlalchemy.engine.Engine 提交
2023-09-16 20:37:26,126 信息 sqlalchemy.engine.Engine 开始(隐式)
2023-09-16 20:37:26,128 信息 sqlalchemy.engine.Engine SELECT www.sychzs.cn AS users_id、www.sychzs.cn AS users_name、users.age AS users_age
来自用户
2023-09-16 20:37:26,128 INFO sqlalchemy.engine.Engine [在 0.00024 秒内生成] ()
爱丽丝 25
鲍勃 30
2023-09-16 20:37:26,129 信息 sqlalchemy.engine.Engine 回滚
MySQLdb是python用来连接mysql的一个相对底层的模块。与提供ORM的更高级模块不同,MySQLdb主要关注如何连接数据库并执行基本操作。主要的操作形式是SQL语句的执行。
#首先下载到本地(选择python对应的版本进行下载)
https://www.sychzs.cn/project/mysqlclient/#files
# 再次安装
pip install .\mysqlclient-2.2.0-cp311-cp311-win_amd64.whl
导入MySQLdb
db = MySQLdb.connect(主机='localhost',用户='root',passwd='root',db='sqllit')
cursor = db.cursor() #创建游标对象
sql = '从admin_user中选择*'
# 查询数据
游标.执行(sql)
行=游标.fetchall()
对于行中的行:
打印(行)
光标.close()
pymssql是python用来连接Microsoft SQL Server的工具库(包)。
pip 安装 pymssql
导入pymssql
conn = pymssql.connect(主机='主机',数据库='db_name',用户='用户',密码='pwd',字符集='utf8')
光标 = conn.cursor()
游标.execute("sql语句")
# 如果进行修改操作,需要提交事务;如果进行查询操作,则无需提交。
conn.commit()conn.close()