当前位置: 首页 > news >正文

织梦网站主页底四年级说新闻2023

织梦网站主页底,四年级说新闻2023,一般通过会社员,抖音蓝号代运营上次发布《多种方式访问mysql的对比分析》一文后,有读者留言,说SQLAlchemy的使用方法没讲清楚,只有一段简短的介绍,演示代码也比较模糊,SQLAlchemy在实际项目运用非常广泛,由于其支持 ORM 模型,…

上次发布《多种方式访问mysql的对比分析》一文后,有读者留言,说SQLAlchemy的使用方法没讲清楚,只有一段简短的介绍,演示代码也比较模糊,SQLAlchemy在实际项目运用非常广泛,由于其支持 ORM 模型,能够将表映射为类,让你用Python类的方式来操作数据库,而不需要直接写SQL语句,是面向对象访问数据库不可或缺的一个库,根据需求设计数据库结构和操作逻辑,可以大大提高开发效率和代码可维护性。今天风云将该库的详细使用方法重新整理了,发出来,供大家参考,欢迎留言讨论。

为什么还要用SQLAlchemy呢?原因有几个:
1.简洁:SQLAlchemy让你用Python代码来操作数据库,代码更简洁,也更容易理解。
2.安全:它能帮助你避免SQL注入等安全问题,让你的数据库更安全。
3.灵活:SQLAlchemy支持多种数据库(比如MySQL、PostgreSQL、SQLite等),你只需要改一下配置,就能在不同的数据库之间切换。

SQLAlchemy 包括两个核心组件:

  • SQLAlchemy Core提供底层 SQL 构造和数据库连接。
  • SQLAlchemy ORM:实现面向对象的 ORM 映射。

1. 安装 SQLAlchemy

使用 pip 安装:

pip install sqlalchemy

2. 数据库连接

使用 create_engine 创建数据库连接:

from sqlalchemy import create_engine

# 替换为实际的数据库 URL

engine = create_engine('sqlite:///example.db')  # SQLite 示例

# MySQL 示例: 'mysql+pymysql://user:password@host/dbname'

3. 使用 SQLAlchemy Core

3.1 创建表

使用 MetaData 和 Table 定义表结构:

from sqlalchemy import Table, Column, Integer, String, MetaData,create_engineengine = create_engine('sqlite:///example.db')  # SQLite 示例数据库
metadata = MetaData() # 元数据对象users = Table(  # 创建表'users', metadata,  # 表名Column('id', Integer, primary_key=True),  # id字段Column('name', String(50)),  # name字段Column('age', Integer) # age字段
)metadata.create_all(engine)  # 创建表

3.2 插入数据

使用 insert() 插入数据:

from sqlalchemy import insertwith engine.connect() as conn:  # 连接数据库stmt = insert(users).values(name='Alice', age=30)  # 插入数据conn.execute(stmt)  # 执行插入语句

3.3 查询数据

使用 select() 查询:

from sqlalchemy import selectwith engine.connect() as conn:  # 连接数据库stmt = select(users)  # 查询数据result = conn.execute(stmt)  # 执行查询语句for row in result:  # 遍历结果print(row)

4. 使用 SQLAlchemy ORM

4.1 定义模型

使用 ORM 的 declarative_base 定义模型:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, StringBase = declarative_base()  # 创建基类class User(Base):  # 创建User类__tablename__ = 'users'  # 表名id = Column(Integer, primary_key=True)  # id字段name = Column(String(50)) # name字段age = Column(Integer) # age字段

4.2 创建表

创建表结构:

Base.metadata.create_all(engine)

4.3 创建会话

使用 sessionmaker 创建会话:

from sqlalchemy.orm import sessionmakerSession = sessionmaker(bind=engine) # 创建Session会话类
session = Session()

4.4 增删改查

插入数据

new_user = User(name='Bob', age=25) # 创建新用户session.add(new_user)# 添加新用户到sessionsession.commit() # 提交事务

查询数据

users = session.query(User).all()  # 查询所有用户
for user in users:  # 遍历查询结果print(user.name, user.age)

更新数据

user = session.query(User).filter_by(name='Bob').first() # 查询用户
user.age = 26session.commit() # 提交事务

删除数据

user = session.query(User).filter_by(name='Bob').first() # 查询具体用户,定位到第一条记录session.delete(user) # 删除用户
session.commit() # 提交事务

5. 使用关系映射

定义一对多关系:

from sqlalchemy import ForeignKeyfrom sqlalchemy.orm import relationshipclass Post(Base):__tablename__ = 'posts'  # 表名id = Column(Integer, primary_key=True) # id字段title = Column(String(100)) # title字段user_id = Column(Integer, ForeignKey('users.id')) # 定义外键user = relationship('User', back_populates='posts') # 关联关系User.posts = relationship('Post', order_by=Post.id, back_populates='user') # 关联关系# 插入关联数据:
user = User(name='Charlie')post1 = Post(title='Post 1', user=user)post2 = Post(title='Post 2', user=user)session.add(user) # 添加关联数据session.add_all([post1, post2]) # 添加所有关联session.commit() # 提交事务#查询关联数据:
user = session.query(User).filter_by(name='Charlie').first() # 查询关联数据for post in user.posts: # 遍历关联数据print(post.title)

6. 使用事务

手动管理事务:

from sqlalchemy.exc import SQLAlchemyErrortry:with session.begin():  # 开启事务user = User(name='Dave', age=40) # 创建新用户session.add(user) # 添加新用户到session
except SQLAlchemyError as e: # 如果发生异常,回滚事务print(f"Transaction failed: {e}")session.rollback() # 回滚事务

7. 完整的封装类

最后,风云按惯例将此使用封装为一个完整的类,大家有需要有的自取

from sqlalchemy import create_engine, Column, Integer, String, exc
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmakerBase = declarative_base()  # 创建基类# 定义表模型
class User(Base):__tablename__ = 'users' # 表名id = Column(Integer, primary_key=True, autoincrement=True) # id字段name = Column(String(50), nullable=False) # name字段age = Column(Integer, nullable=False) # age字段class MySQLHandler:def __init__(self, user, password, host, database):"""初始化数据库连接和会话"""try:url = f'mysql+pymysql://{user}:{password}@{host}/{database}' # 创建数据库连接self.engine = create_engine(url, echo=False) # 数据库引擎Base.metadata.create_all(self.engine)  # 创建表self.Session = sessionmaker(bind=self.engine) # 创建会话except exc.SQLAlchemyError as e:print(f"Error initializing database: {e}")def add_user(self, name, age):"""添加用户"""session = self.Session() try:new_user = User(name=name, age=age) # 创建新用户session.add(new_user) # 添加新用户到sessionsession.commit() # 提交事务print(f"User {name} added successfully!")except exc.SQLAlchemyError as e: # 如果发生异常,回滚事务session.rollback() # 执行回滚print(f"Error adding user: {e}")finally:session.close() # 关闭会话def get_users(self):"""查询所有用户"""session = self.Session()try:users = session.query(User).all() # 查询所有用户return [{"id": user.id, "name": user.name, "age": user.age} for user in users]except exc.SQLAlchemyError as e: # 如果发生异常,返回空print(f"Error fetching users: {e}")return []finally:session.close()def update_user(self, user_id, name=None, age=None):"""更新用户信息"""session = self.Session()try:user = session.query(User).filter_by(id=user_id).first() # 查询用户if not user: # 如果用户不存在,返回print(f"User with ID {user_id} not found.")returnif name:user.name = nameif age:user.age = agesession.commit() # 提交事务print(f"User {user_id} updated successfully!")except exc.SQLAlchemyError as e: # 如果发生异常,回滚事务session.rollback()print(f"Error updating user: {e}")finally:session.close()def delete_user(self, user_id):"""删除用户"""session = self.Session()try:user = session.query(User).filter_by(id=user_id).first() # 查询用户if not user: # 如果用户不存在,返回print(f"User with ID {user_id} not found.")returnsession.delete(user) # 删除用户session.commit() # 提交事务print(f"User {user_id} deleted successfully!")except exc.SQLAlchemyError as e: # 如果发生异常,回滚事务session.rollback()print(f"Error deleting user: {e}")finally:session.close()def transaction_example(self):"""事务操作示例"""session = self.Session()try:user1 = User(name="Alice", age=30) # 创建2个新用户user2 = User(name="Bob", age=25) # 添加多个用户session.add(user1) # 添加新用户到sessionsession.add(user2)# 模拟事务中的错误# Uncomment the line below to raise an exception and trigger a rollback# raise ValueError("Simulated error!")session.commit() # 提交事务print("Transaction completed successfully!")except (exc.SQLAlchemyError, ValueError) as e: # 如果发生异常,回滚事务session.rollback()print(f"Transaction failed: {e}")finally:session.close()# 使用示例
if __name__ == "__main__":# 初始化数据库连接db_handler = MySQLHandler(user='root', password='password123', host='localhost', database='test_db')# 添加用户db_handler.add_user(name="John Doe", age=28)# 查询用户users = db_handler.get_users()print("Users:", users)# 更新用户db_handler.update_user(user_id=1, name="Jane Doe", age=32)# 删除用户db_handler.delete_user(user_id=1)# 事务示例db_handler.transaction_example()

http://www.ds6.com.cn/news/116398.html

相关文章:

  • 京东物流网站北京seo网站设计
  • 网站开发安全小贴士免费建立一个网站
  • 日照网站制作泉州关键词快速排名
  • 手机网站 微信支付济南seo公司报价
  • 3d动画制作软件中文版seo公司怎样找客户
  • wordpress用户注册文件网站关键词优化网站推广
  • 做网站的开发语言数据分析软件哪个最好用
  • 鹿城做网站三亚百度推广开户
  • 台州网站排名优化价格百度上怎么发布作品
  • 佛山提供网站设计报价推广网站的四种方法
  • 怎么看网站是什么时候做的文案代写平台
  • 苹果官网首页seo提升关键词排名
  • 目前引流最好的平台优化关键词首页排行榜
  • 个人可以采集视频做网站吗平台搭建
  • 如何给网站做右侧导航应用商店关键词优化
  • app开发哪家公司比较专业百度搜索关键词优化方法
  • 软件工程师面试常见问题苏州网站关键字优化
  • 四川省住房和城乡建设厅官网电话合肥网站优化平台
  • 专做批发的网站有哪些南阳本地网络推广优化公司
  • 做外围网站代理违法吗四川网站seo
  • 网站建设技术方案模板网站注册流程和费用
  • 找高权重的网站做外链网络推广什么做
  • 虚机wordpress全站https优化20条措施
  • 武汉网站seo德升谷歌广告投放步骤
  • 北京分形科技有限公司seo网络推广课程
  • 青岛外贸网站建设站长工具seo综合查询全面解析
  • 软件商店app曹操博客seo
  • 公司网站制作一般多少钱网站搜索引擎优化的方法
  • 大型网站如何开发b2b网站排名
  • 企业网站创建小结软件推广