sqlalchemy mysql+pymysql_python中的sql(pymysql和sqlalchemy)

本文介绍了如何在Python中使用pymysql和sqlalchemy进行数据库操作。首先,展示了pymysql的基本用法,包括连接数据库、执行SQL(增删改查)及关闭连接。然后,详细解释了sqlalchemy的使用,包括创建引擎、定义数据模型、进行增删改查操作。示例中,创建了Student类并演示了查询和添加记录的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pymysql

一、初识pymysql

#两种方式安装此模块 pip install pymysql 或者通过pycharm进行安装

# 导入pymysql

import pymysql

#创建连接

conn = pymysql.connect(

host="localhost",

user="root",

password="123",

database="day05",

port = 3306

)

print(conn)

#获取游标

cur = conn.cursor()

# 编写sql语句

sql="insert into account VALUES (10,'李明',15000);"

#执行sql

cur.execute(sql)

#提交事物

conn.commit()

#关闭连接

cur.close()

conn.close()

二、pymysql的增删改查

import pymysql

conn = pymysql.connect(

host = "localhost",

user = "root",

password = "123",

database = "day05",

port = 3306

)

print(conn)

cur = conn.cursor()

id = int(input("请输入id:"))

name = input("请输入姓名:")

money = int(input("请输入钱:"))

# start transaction 不用写,pymysql默认开启事务

'''

#插入语句

# sql = "insert into account VALUES (%s,%s,%s);"

# sql = "insert into account VALUES (%(id)s,%(name)s,%(money)s);"

#

# # ret = cur.execute(sql,(id,name,money))

# ret = cur.execute(sql,{"id":id, "name":name,"money":money})

# print(ret)

'''

'''

#修改操作

sql = "update account set money =%s where NAME = %s;"

ret = cur.execute(sql,(14000,"杨洋"))

print(ret)

'''

'''

#删除操作

sql = "delete from account where money <= %s;"

ret = cur.execute(sql,10000)

print(ret)

'''

#查询操作

sql = "select * from account where money

ret = cur.execute(sql,15000)

#获取一条

# cur.fetchone()

#获取两条

# cur.fetchmoney(2)

#全部获取

c1 = cur.fetchall()

print(c1)

print(ret)

conn.commit()

cur.close()

conn.close()

sqlalchemy

一、sqlalchemy格式

from sqlalchemy import create_engine

from sqlalchemy import Column,Integer,String

from sqlalchemy.ext.declarative import declarative_base

#1.创建引擎

eng = create_engine("mysql+pymysql://root:123@localhost/day05?charset=utf8")

print(eng)

#2.创建基类

Base = declarative_base()

#3.创建类

class Student(Base):

__tablename__ = "children" #指定表格名称

id = Column(Integer,primary_key=True,autoincrement=True)

name = Column(String(32),nullable=False)

email = Column(String(32),unique=True)

#4.创建表格

Base.metadata.create_all(eng)

#5.删除表格

Base.metadata.drop_all()

二、sqlalchemy中的增删改查

#sqlalchemy 和pymysql要配合使用

from sqlalchemy import create_engine

from sqlalchemy import Column,Integer,String

from sqlalchemy.ext.declarative import declarative_base

#1.创建引擎

eng = create_engine("mysql+pymysql://root:123@localhost/day05?charset=utf8")

print(eng)

#2.创建基类

Base = declarative_base()

#3.创建类

class Student(Base):

__tablename__ = "children" #指定表格名称

id = Column(Integer,primary_key=True,autoincrement=True)

name = Column(String(32),nullable=False)

email = Column(String(32),unique=True)

#4.创建表格

# Base.metadata.create_all(eng)

#5.添加记录

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=eng)

session = Session()

# student = Student(name = "刘备",email = "110@sq.com")# 创建student对象

# session.add(student) # 添加记录

# session.add_all([

# Student(name='刘小争',email='120@sq.com'),

# Student(name='刘大争',email='130@sq.com'),

# Student(name='小小争',email='150@sq.com')

# ])#批量增加

#查询操作

student = session.query(Student).first()

print(student.id,student.name,student.email)

student2 = session.query(Student).get(ident=4)#使用唯一标示

print(student2.id,student2.name,student2.email)

session.commit()#提交事务

session.close()

<think>好的,我现在需要回答用户关于SQLAlchemy连接MySQL数据库时连接字符串的正确格式、配置以及示例的问题。首先,我需要回忆一下相关的知识,并查看用户提供的引用内容,确保信息准确。 首先,用户提到了使用PyMySQL作为驱动,所以连接字符串应该使用mysql+pymysql://的格式。根据引用[1]、[2]、[3]中的示例,连接字符串的基本结构是:mysql+pymysql://用户名:密码@主机:端口/数据库名?参数。例如,引用[1]中的示例是'mysql+pymysql://mysql用户名:mysql用户密码@localhost:3306/mysql数据库名?charset=utf8',这里包含了字符集设置。 接下来,需要注意端口号部分,如果MySQL使用的是默认端口3306,可以省略不写,但用户提供的示例中有时包含有时省略。比如引用[3]中的示例是'mysql+pymysql://root:@ROOT_root_123/blog',这里没有端口,可能因为使用了默认端口。不过,明确写出端口号会更清晰,尤其是在非默认端口的情况下。 然后是关于参数的配置,比如charset=utf8或者utf8mb4,用于指定字符编码。引用[1][2]都提到了charset=utf8,而用户可能需要知道是否需要其他参数,比如ssl、连接超时等。不过根据用户的问题,可能只需要基本配置,所以重点放在必填项上。 此外,引用[4]提到了create_engine函数可以接受其他参数,如echo、pool_size等,这些属于连接池日志的配置,但用户的问题主要关注连接字符串的格式,所以这部分可以作为额外配置补充。 另外,用户可能需要知道如何处理密码中的特殊字符。比如,如果密码包含@或:等字符,需要进行URL编码。例如,密码是p@ssw:rd,应该转义为p%40ssw%3Ard。引用中没有提到这一点,但这是常见问题,应该包含在回答中。 然后,关于SQLAlchemyPyMySQL的安装,用户可能需要确认是否需要安装这两个库。引用[5]提到Flask-SQLAlchemy的灵活性,但用户的问题更基础,所以需要明确说明使用前需安装sqlalchemypymysql,可以通过pip安装。 最后,综合所有信息,应该给出一个清晰的连接字符串格式说明,包括各部分的含义,并提供几个示例,比如本地连接、带端口、带参数的示例,以及注意事项如特殊字符处理驱动选择。同时,可以引用提供的参考资料作为支持,比如引用[1]、[2]、[3]中的示例,以及引用[4]中的参数配置说明。 需要确保回答结构清晰,分点说明,并给出代码示例。可能还需要比较不同驱动(如mysqlclientPyMySQL)的区别,但用户明确提到PyMySQL,所以重点放在PyMySQL上。 总结步骤: 1. 连接字符串的基本结构。 2. 各部分解释(驱动、用户名、密码、主机、端口、数据库名、参数)。 3. 示例代码,包括基本用法带参数的例子。 4. 注意事项(特殊字符转义、驱动安装)。 5. 高级配置(连接池、日志)作为可选补充。 6. 引用相关参考资料中的示例来支持回答。</think>以下是关于SQLAlchemy连接MySQL数据库的详细配置说明: --- ### SQLAlchemy连接MySQL的字符串格式 连接字符串基本结构为: $$mysql+pymysql://{用户名}:{密码}@{主机}:{端口}/{数据库名}?{参数}$$ 1. **驱动标识**:`mysql+pymysql`表示使用PyMySQL驱动 2. **认证信息**:用户名密码(密码含特殊字符需URL编码) 3. **网络地址**:默认`localhost:3306`可省略端口 4. **数据库名称**:必填项 5. **附加参数**:如`charset=utf8mb4`、`ssl_disabled=True`等[^1][^2][^3] --- ### 配置示例 #### 基础连接(本地数据库) ```python from sqlalchemy import create_engine # 示例1:包含所有显式参数 engine = create_engine('mysql+pymysql://user:password@localhost:3306/mydb?charset=utf8mb4') # 示例2:省略默认端口 engine = create_engine('mysql+pymysql://root:123456@127.0.0.1/mydatabase') ``` #### 带特殊字符的密码处理 若密码包含`@`或`:`,需使用URL编码: ```python # 原密码为"p@ss:123",转义后变为"p%40ss%3A123" engine = create_engine('mysql+pymysql://admin:p%40ss%3A123@localhost/mydb') ``` #### 高级配置(连接池与日志) ```python # 启用SQL语句日志 + 连接池配置 engine = create_engine( 'mysql+pymysql://user:pass@host/dbname', echo=True, # 输出SQL日志[^4] pool_size=5, # 连接池保持5个常连接 max_overflow=2, # 允许临时增加2个连接 pool_timeout=30 # 获取连接超时30秒 ) ``` --- ### 关键注意事项 1. **驱动依赖**:需提前安装`sqlalchemy``pymysql`: ```bash pip install sqlalchemy pymysql ``` 2. **字符集建议**:推荐使用`utf8mb4`以支持Emoji特殊字符[^1] 3. **SSL连接**:生产环境需添加`ssl_ca=/path/to/ca.pem`等参数 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值