Python使用pymysql和sqlalchemy访问MySQL的区别

Python使用pymysql和sqlalchemy访问MySQL的区别

1. 两个数据库连接工具的对比

pymysql和sqlalchemy是两个Python中经常用于与MySQL数据库交互的库。都可以连接MySQL数据库,但它们有明显的区别。

(1)特点

pymysql是一个Python模块,它可以用作一个独立的Python文件或作为Python程序中的一个模块。安装pymysql之后,需要导入它并连接到一个MySQL数据库,以开始与之交互。

sqlalchemy是一个Python库和一个ORM(对象关系映射器)。通过SQLAlchemy,可以将Python对象映射到MySQL数据库表中。这种方法可以使MySQL与Python代码的交互更直观和更简单。

(2)区别

pymysql已经足够适合连接到MySQL数据库并执行基本的SQL查询和命令,而sqlalchemy提供了更多的功能。

sqlalchemy包括ORM,它负责数据转换和类型处理。sqlalchemy ORM使用Python类来表示数据库表,这使得查询和数据处理变得无比容易。此外,sqlalchemy还支持高级查询和SQL语句生成,可以在处理复杂查询时更加便捷。

2.访问方式

(1)pymysql

复制代码
import pymysql
 
host = "127.0.0.1:3306"
user = "root"
password = "root"
database = "test"
mysql_db = pymysql.connect(host=host,
                                user=user,
                                password=password,
                                database=database,
                                charset="utf8")
mysql_cursor = mysql_db.cursor()
mysql_cursor.execute('select * from mytable')
cur_rows = mysql_cursor.fetchall()
mysql_cursor.close()

(2)sqlalchemy

复制代码
from sqlalchemy import create_engine
 
host = "127.0.0.1:3306"
user = "root"
password = "root"
database = "test"
 
mysql_engine = create_engine("mysql+pymysql://{user}:{password}@{host}/{database}")
result = mysql_engine.execute('select * from mytable')

# 输出查询结果
for row in result:
    print(row)

3.Python对象映射SQLAlchemy

dataframe对象可以通过SQLAlchemy直接保存到MySQL数据库。

复制代码
import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(20).reshape(5,4),
                  columns=['a','b','c','d'],
                  index=[1,2,3,4,5])
df.index.name = 'idx'

df.to_sql(
    'test_drop',  # 定义MySQL表名
    mysql_engine ,
    index=True,  # df 是否包括索引列
    if_exists='append',  # 追加数据模式
    chunksize=20000)  # 批量20000条

直接将dataframe保存到MySQL数据库,索引和表结构都字段建成。

复制代码
idx	bigint(20)	YES	MUL		
a	bigint(20)	YES			
b	bigint(20)	YES			
c	bigint(20)	YES			
d	bigint(20)	YES			

更多SQLAlchemy的ORM操作

相关推荐
天若有情6737 小时前
程序员原创|借鉴JS事件冒泡,根治电脑文件混乱的“冒泡整理法”
开发语言·javascript·windows·ecmascript·电脑·办公·日常
七颗糖很甜7 小时前
电离层对地基雷达测量精度的影响分析与校正方法
python
特种加菲猫8 小时前
继承,一场跨越时空的对话
开发语言·c++
AC赳赳老秦8 小时前
知识产权辅助:用 OpenClaw 批量生成专利交底书 / 软著申请材料,自动校验格式与内容合规性
java·人工智能·python·算法·elasticsearch·deepseek·openclaw
dLYG DUMS8 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
小熊Coding8 小时前
Python2D射击冒险闯关游戏2.0版本
python·pygame
FYKJ_20108 小时前
springboot校园兼职平台--附源码02041
java·javascript·spring boot·python·eclipse·django·php
玩转单片机与嵌入式9 小时前
玩转边缘AI(TInyML):需要掌握的C++知识汇总!
开发语言·c++·人工智能
苍煜9 小时前
MySQL分库分表和ES到底怎么选?
数据库·mysql·elasticsearch