sqlalchemy的query返回值类型

本文探讨了SQLAlchemy中query方法在不同查询场景下返回值的类型差异,包括全字段查询和特定字段查询的结果形式,并提供了实例说明。

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

关于sqlalchemy的query返回值类型

sqlalchemy是python的ORM框架,可以让我们动态地写sql语句

在学习过程中遇到了一些小的坑点,这里记录一下:

假设一个简单基类student:

class student(base):
    __tablename__ = 'student'
    id = Column(String(16),primary_key=True)
    name = Column(String(16), nullable=False)

情况1:query查询表中所有字段

res = session.query(student).all()

会返回所有查询到的student对象组成的一个list,list内是每个对象的地址,可以通过res[index].属性名进行访问,例如res[0].id

情况2:query查询某一个或多个特定字段

res = session.query(student.name).all()

同样会返回一个list,但是list内的元素是所要查询属性组成的一个个元组,例如[('小明',),('小红',)],此时可以通过res[index][index]或者res[index].属性名进行访问,例如res[0][0]或res[0].id

ps:上述情况中不加all()效果一样,只不过返回信息变为了sql执行语句,仍然可以通过上述方式进行访问

SQLAlchemy中,你可以使用`case()`函数来模拟SQL的`CASE WHEN`语句。`case()`函数允许你在查询中进行条件判断,并返回不同的值。 以下是一个示例,演示如何在SQLAlchemy中使用`case()`函数: ```python from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy import case, select, text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String # 创建数据库连接 engine = create_engine("your_database_connection_string") Session = sessionmaker(bind=engine) session = Session() # 定义数据模型 Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) # 查询示例 query = select([ User.name, case( [ (User.age >= 18, "成年人"), (User.age < 18, "未成年人") ], else_="未知" ).label("age_group") ]) # 执行查询 result = session.execute(query) # 打印查询结果 for row in result: print(f"姓名: {row.name}, 年龄分组: {row.age_group}") ``` 在上面的示例中,我们首先导入了所需的模块和函数。 然后,我们定义了一个数据模型`User`,它对应数据库中的`users`表。 接下来,我们使用`case()`函数来模拟`CASE WHEN`语句。在`case()`函数中,我们指定了条件列表和对应的返回值。最后,我们使用`label()`函数给返回的值命名为`age_group`。 在查询示例中,我们使用`select()`函数指定要查询的字段,并使用`case()`函数作为一个字段来返回年龄分组。 最后,我们通过执行查询并打印结果来获取结果。 请注意,你需要将`"your_database_connection_string"`替换为你的实际数据库连接字符串。 希望这个示例能帮助你理解如何在SQLAlchemy中使用`case()`函数来模拟`CASE WHEN`语句。如果你有其他问题,请随时提问!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值