SQLAlchemy打印SQL语句

 

SQLAlchemy打开SQL语句方法如下,echo=true将开启该功能:

 

engine = create_engine("<db_rul>", echo=True)

 

Flask-SQLAlchemy打开SQL方法如下:

 

app.config["SQLALCHEMY_ECHO"] = True

 

--end 

<think>我们被要求使用中文回答,并且需要按照指定的格式处理数学表达式。但当前问题不涉及数学公式,因此我们主要关注如何回答关于SQLAlchemy执行SQL语句的问题。根据用户的问题:“我想了解如何使用SQLAlchemy执行SQL语句请问如何使用SQLAlchemy执行自定义SQL语句”我们参考了提供的引用内容,特别是引用[1]中展示了使用SQLAlchemy执行原生SQL的示例。回答步骤:1.创建引擎(engine)连接到数据库。2.使用引擎创建连接(connection)。3.通过连接执行SQL语句。同,引用[3]中也展示了使用create_engine和session来执行操作,但用户问题重点在于执行自定义SQL,所以我们将展示两种常见方式:使用连接(connection)和使用会话(session)。注意:用户问题不涉及数学公式,所以不需要使用$...$或$$...$$格式。我们将按照以下结构回答:-介绍使用engine.connect()执行SQL(如引用[1]所示)-介绍使用session.execute()执行SQL(如引用[3]中的session也可以执行SQL)同,根据指令,我们需要在回答末尾生成相关问题。另外,根据引用[1]中的示例,我们可以在适当的地方添加引用标识。开始回答:</think>### 如何使用 SQLAlchemy 执行自定义 SQL 语句SQLAlchemy 中执行原生 SQL 语句主要有两种方式,以下分步骤说明: #### 方法 1:使用数据库连接(Connection) 这是最直接的方式,适用于不需要 ORM 映射的简单 SQL 操作: ```python from sqlalchemy import create_engine # 创建数据库引擎(替换为你的连接参数) engine = create_engine('mysql+pymysql://user:password@host:port/database') # 获取连接并执行 SQL with engine.connect() as conn: # 执行 DDL(创建/修改表) conn.execute("CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50))") # 执行 DML(插入数据) conn.execute("INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob')") # 执行查询并获取结果 result = conn.execute("SELECT * FROM users WHERE id > :id", {'id': 0}) for row in result: print(row) # 输出:(1, 'Alice'), (2, 'Bob') ``` **关键点**: - 使用 `engine.connect()` 获取数据库连接 - 参数化查询使用 `:param` 占位符和字典传参[^1] - 查询结果返回 `ResultProxy` 可迭代对象 #### 方法 2:使用会话(Session) 适用于已配置 ORM 模型的场景,保持事务一致性: ```python from sqlalchemy.orm import sessionmaker from your_model_module import engine # 导入已创建的引擎 # 创建会话工厂 Session = sessionmaker(bind=engine) # 在会话中执行 SQL with Session() as session: # 执行查询 result = session.execute("SELECT name FROM users WHERE id = :id", {'id': 1}) print(result.scalar()) # 输出:Alice # 执行数据修改(需提交) session.execute("UPDATE users SET name = 'Carol' WHERE id = 2") session.commit() # 提交事务 ``` **关键点**: - 通过 `session.execute()` 执行 SQL - 需显式调用 `session.commit()` 提交数据修改[^3] - 使用 `result.scalar()` 获取单值结果 #### 注意事项 1. **参数绑定**:始终使用参数化查询防止 SQL 注入,如: ```python # ✅ 安全方式 conn.execute("SELECT * FROM users WHERE name = :name", {'name': user_input}) # ❌ 危险方式(拼接字符串) conn.execute(f"SELECT * FROM users WHERE name = '{user_input}'") ``` 2. **结果处理**: - `result.fetchall()` 返回所有行 - `result.mappings()` 返回字典形式结果 3. **事务管理**:连接默认开启事务,需显式提交(除查询外)[^2] > **应用场景对比**: > - 简单脚本/数据迁移 → 使用 `Connection` > - Web 应用(如 Flask)→ 使用 `Session` 保持事务一致性 > - 表结构操作(CREATE/ALTER)→ 必须使用 `Connection`[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值