首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我可以在SQLAlchemy中创建TEMPORARY TABLE而无需附加到Table._prefixes吗?

在SQLAlchemy中,可以在不附加到Table._prefixes的情况下创建TEMPORARY TABLE。以下是一个简单的示例:

代码语言:python
代码运行次数:0
复制
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, select

# 创建一个内存中的临时表
metadata = MetaData()
temp_table = Table(
    'temp_table',
    metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String),
    prefixes=['TEMPORARY']
)

# 创建一个持久化表
persistent_table = Table(
    'persistent_table',
    metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String)
)

# 创建一个引擎
engine = create_engine('sqlite:///:memory:')

# 创建表
metadata.create_all(engine)

# 插入数据
with engine.begin() as conn:
    conn.execute(temp_table.insert(), [{'id': 1, 'name': 'John'}])
    conn.execute(persistent_table.insert(), [{'id': 1, 'name': 'John'}])

# 查询数据
with engine.begin() as conn:
    result = conn.execute(select([temp_table]))
    print("Temporary table data:")
    for row in result:
        print(row)

    result = conn.execute(select([persistent_table]))
    print("Persistent table data:")
    for row in result:
        print(row)

在这个示例中,我们创建了一个名为temp_table的临时表,并将其添加到metadata对象中。然后,我们创建了一个名为persistent_table的持久化表,并将其添加到metadata对象中。最后,我们使用create_all()方法创建了这两个表。

在插入数据时,我们使用execute()方法将数据插入到两个表中。最后,我们使用execute()方法查询两个表中的数据,并将结果打印到控制台上。

需要注意的是,临时表只在当前会话中可见,当会话结束时,临时表将被自动删除。因此,如果您希望在多个会话中使用临时表,则需要在每个会话中重新创建它。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

带你认识 flask 中的数据库

本应用可以像大多数其他应用一样,使用任何一种类型的数据库来实现,但是出于上述原因,我将使用关系数据库。 在第三章中,我向你展示了第一个Flask扩展,在本章中,我还要用到两个。...... done 通过命令输出,你可以了解到Alembic在创建迁移的过程中执行了哪些逻辑。...当你将一个函数作为默认值传入后,SQLAlchemy会将该字段设置为调用该函数的值(请注意,在utcnow之后我没有包含(),所以我传递函数本身,而不是调用它的结果)。...回想一下,我在User类中创建的db.relationship为用户添加了posts属性,并为用户动态添加了author属性。我使用author虚拟字段来调用其作者,而不必通过用户ID来处理。...在添加shell上下文处理器函数后,你无需导入就可以使用数据库实例: (venv) $ flask shell>>> dbSQLAlchemy engine=sqlite:////Users/migu7781

2.3K20
  • SqlAlchemy 2.0 中文文档(三十六)

    该方法可以多次调用,以将新条目添加到要返回的表达式列表中。...版本 1.4.0b2 中的新功能:该方法可以多次调用,以将新条目添加到要返回的表达式列表中。 给定的列表达式集合应来源于 INSERT、UPDATE 或 DELETE 的目标表。...该方法可以多次调用以将新条目添加到要返回的表达式列表中。...在单个参数字典的典型情况下,新传递的键将替换上一个构造中的相同键。在基于列表的“多个值”构造的情况下,每个新值列表都会附加到现有的值列表上。...joins_implicitly - 当为 True 时,列值函数的“table”部分可以作为 SQL 查询中 FROM 子句的成员,而不需要对其他表进行显式 JOIN,并且不会生成“笛卡尔积”警告。

    40410

    SqlAlchemy 2.0 中文文档(七十六)

    assert uq not in t.constraints 在上面的示例中,将列“a”附加到表“t”的附件事件将在附加列“b”之前触发(因为在“b”之前在Table构造函数中声明了“a”),如果尝试附加约束...然而,尽管存在这种长期行为和示例,用户显然对这种行为感到惊讶,当在社区中询问时,我无法找到任何用户实际上不感到惊讶,即您可以将完整字符串发送到像Query.filter()这样的方法中。...然而,尽管存在这种长期行为和示例,用户显然对这种行为感到惊讶,当在社区中询问时,我无法找到任何一个用户实际上不感到惊讶,即您可以将完整字符串发送到像Query.filter()这样的方法中。...()现在可以从“sqlalchemy”中导入,而不需要“sql”部分。...然而,尽管有这种长期存在的行为和示例,用户显然对此行为感到惊讶,当在社区中询问时,我无法找到任何一个用户实际上不感到惊讶的,即您可以将完整的字符串发送到Query.filter()等方法中。

    10510

    SqlAlchemy 2.0 中文文档(七)

    Table对象来定义的;关系在__mapper_args__字典中定义。...这意味着这些参数不会被添加到__init__()方法中,但Session仍然可以在获取它们的值后通过自动增量或其他默认值生成器进行刷新时设置它们。...警告 使用default设置一个default与init=False的数据类字段()将不像预期的那样与完全普通的数据类一起工作,因为 SQLAlchemy 类工具将替换数据类创建过程中在类上设置的默认值...这意味着这些属性的参数不会被添加到 __init__() 方法中,但Session 仍然可以在 flush 期间从自增或其他默认值生成器获取它们的值后设置它们。...警告 使用 field() 声明一个数据类并设置 default 以及 init=False 不会像在完全普通的数据类中预期的那样起作用,因为 SQLAlchemy 类的装饰会替换数据类创建过程中在类上设置的默认值

    53120

    SqlAlchemy 2.0 中文文档(四十二)

    注释式声明表 映射声明 ORM 映射时,可以通过将其添加到 类型注解映射 中,将上述自定义 GUID 类型与 Python uuid.UUID 数据类型相关联,该类型通常定义在 DeclarativeBase...增强现有类型 TypeDecorator 允许创建自定义类型,将绑定参数和结果处理行为添加到现有类型对象中。当需要额外的在 Python 中对数据进行数据库内/外编组时使用。...class sqlalchemy.types.TypeDecorator 允许创建将额外功能添加到现有类型的类型。...ORM 映射时,可以通过将其添加到 类型注释映射 中,将上面定义的自定义GUID类型与 Python uuid.UUID 数据类型关联起来,该类型通常定义在 DeclarativeBase 类上: import...,而无需在每次使用操作符时直接调用Operators.op()。

    22510

    SqlAlchemy 2.0 中文文档(二十三)

    ,应明确将其添加到Session中: >>> session.add(i1) 在较旧版本的 SQLAlchemy 中,保存-更新级联在所有情况下都会双向发生。...然而,如果上述操作在反向方向进行,即将Item.order赋值而不是直接附加到Order.item,则级联操作不会自动进行到Session中,即使对象赋值Order.items和Item.order的状态与前面的示例相同...= o1 >>> i1 in order.items True >>> i1 in session False 在上述情况下,在创建Item对象并设置所有所需状态之后,应明确将其添加到Session中...## 管理事务 在 1.4 版本中更改:会话事务管理已经进行了修改,使其更清晰、更易于使用。特别是,现在它具有“自动开始”操作,这意味着可以控制事务开始的时间点,而无需使用传统的“自动提交”模式。...这样做是为了让后续操作可以继续使用那些未受影响的数据,而无需从数据库中刷新。

    28710

    SqlAlchemy 2.0 中文文档(六)

    类可以像混合类一样添加到层次结构中(参见 Mixin and Custom Base Classes),允许子类仅从特殊类扩展: class SomeAbstractBase(Base): __...然后,这些表可以在不同的数据库中创建: DefaultBase.metadata.create_all(some_engine) OtherBase.metadata.create_all(some_other_engine...可以将声明性指令(如__table_args__和__mapper_args__)分配给混合类或基类,在继承混合类或基类的任何类中,这些指令将自动生效。...版本 2.0 中的变化:声明式 API 现在可以接受 Column 对象以及任何形式的 mapped_column() 构造,当使用混合类时无需使用 declared_attr()。...此行为差异的原理是映射属性已经可以被类继承,例如,超类映射表上的特定列不应该重复到子类中,而特定于特定类或其映射表的元素不可继承,例如本地映射的表名。

    38710

    SqlAlchemy 2.0 中文文档(五十六)

    select().join() 和 outerjoin() 将 JOIN 条件添加到当前查询中,而不是创建子查询 - 有些相关的是,Select 类中的 .join() 和 .outerjoin() 方法隐式地创建了一个子查询...,可以将被“always”过滤器捕获的新警告添加到要解决的“错误”列表中。...在 SQLAlchemy 的最初版本中,根本不存在 Query 对象。最初的想法是 Mapper 构造本身将能够选择行,并且 Table 对象而不是类将用于在 Core 风格的方法中创建各种条件。...在 SQLAlchemy 的最初版本中,Query对象根本不存在。最初的想法是Mapper构造本身将能够选择行,并且Table对象,而不是类,将用于以 Core 风格创建各种条件。...在 SQLAlchemy 的最初版本中,根本不存在Query对象。最初的想法是Mapper构造本身将能够选择行,并且Table对象,而不是类,将用于以 Core 风格的方式创建各种条件。

    48410

    SqlAlchemy 2.0 中文文档(二十)

    Python 中从父对象获取适当的状态而无需在呈现的语句中渲染对父表的连接。...另请参阅 我正在使用我的 Session 重新加载数据,但它没有看到我在其他地方提交的更改 - 在常见问题解答中 刷新/过期 - 在 ORM Session 文档中 ### 自动刷新 当传递此选项为 False...single_entity=False – 如果为 True,则此Bundle的行可以作为“单个实体”返回,而不是在与映射实体相同的元组中。...另请参阅 我正在使用我的 Session 重新加载数据,但它没有看到我在其他地方提交的更改 - 在常见问题解答中 刷新/过期 - 在 ORM Session 文档中 自动刷新 当传递为False时,此选项将导致...Python 中从父对象中获取适当的状态而无需在渲染语句中渲染到父表的连接。

    32510

    SqlAlchemy 2.0 中文文档(四)

    使用此注册表,一组映射器配置可以作为一个组进行最终确定,并且在特定注册表内的类可以在配置过程中相互通过名称引用。...在“经典”形式中,表的元数据是分别用Table构造创建的,然后通过registry.map_imperatively()方法与User类关联,在建立registry实例后。...使用此注册表,一组映射配置可以作为一个组完成,并且在配置过程中,特定注册表中的类可以通过名称相互引用。...在 2.0 版中更改:现在使用registry.map_imperatively()方法创建经典映射。sqlalchemy.orm.mapper()独立函数被有效删除。...在“经典”形式中,表元数据是分别使用Table构造创建的,然后通过registry.map_imperatively()方法与User类关联,在建立registry实例之后。

    32610

    如何用Python自动操作数据库?

    我在使用 Python 之前,做数据分析工作的流程,一般是先打开数据库客户端,然后运行一段写好的 SQL 语句,把数据查询出来,然后再把数据复制到 Excel 中并制作报表。...在使用 Python 之后,这些工作都可以变成自动化,从而让我有更多的时间,去思考和解决业务相关的问题,而不是陷入重复使用工具的手动操作。...、SQL Server 等等,如果你还没有安装,可以通过以下命令进行安装: pip install sqlalchemy 要测试 SQLAlchemy 模块是否正确安装,可以在 Jupyter Lab...创建表 为了演示用 Python 自动操作数据库,假设你的数据库账号拥有创建表的权限,那么就可以执行下面的语句,实现创建一个新的表: # 执行创建表的 SQL 语句 sql = 'create table...Python 自动操作数据库的一些常用方法,从 SQLAlchemy 和 cx_Oracle 模块的安装和导入,到连接数据库,再到创建表和增删改查,最后对数据进行备份和删除表,这些操作都可以在 Jupyter

    88110

    SqlAlchemy 2.0 中文文档(一)

    作为反射的示例,我们将创建一个新的`Table`对象,该对象表示我们在本文档的前几节中手动创建的`some_table`对象。...在更复杂的依赖场景中,FOREIGN KEY 约束也可以在创建后使用 ALTER 应用于表。...在更复杂的依赖场景中,FOREIGN KEY 约束也可以在创建后针对表使用 ALTER 来应用。...然后,在处理数据库元数据中,我们学习了如何使用MetaData和相关对象在 SQLAlchemy 中表示数据库表、列和约束。在本节中,我们将结合上述两个概念来创建、选择和操作关系数据库中的数据。...在下面的示例中,从 user_account 表中的行派生出添加到 address 表中的行,为每个用户提供 aol.com 的免费电子邮件地址: >>> select_stmt = select(user_table.c.id

    93210

    SqlAlchemy 2.0 中文文档(四十六)

    由于特定的 Pool 引用单个“创建者”函数(在 Engine 中引用 URL 和连接选项使用),通常可以假定关于单个连接的观察结果对所有后续连接都是有效的,例如数据库版本,服务器和客户端编码设置,排序规则设置等等...事件挂钩可以直接附加到Table对象或MetaData集合,以及任何可通过单独的 SQL 命令创建和删除的SchemaItem类或对象。...应用于Column.server_default参数 在对该字典执行任何操作之前调用事件,并且内容可以被修改;以下其他键可以被添加到字典中以进一步修改如何构造Column: key - 将用于在.c...事件钩子可以直接附加到Table对象或MetaData集合,以及任何可以使用独立的 SQL 命令单独创建和删除的SchemaItem类或对象。...在对此字典执行任何操作之前调用事件,并且内容可以被修改;以下附加键可以添加到字典中以进一步修改如何构造Column: key - 将用于在.c集合中访问此Column的字符串键;将应用于Column.key

    30210

    SqlAlchemy 2.0 中文文档(五十二)

    当前的方言将此处理为基本类型中的长度“None”,而不是提供这些类型的方言特定版本,因此指定基本类型如 VARCHAR(None) 可以在不同的后端上假定“无长度”的行为而不使用方言特定的类型。...这通常比 DSN 更容易使用,并且具有另一个优势,即可以在 URL 中本地指定要连接到的特定数据库名称,而不是将其固定为数据源配置的一部分。...一种方法是在引擎上设置事件侦听器,该事件侦听器将凭据令牌添加到方言的连接调用中。 关于这一点的更多讨论可以在 生成动态身份验证令牌中找到。...一种方法是在引擎上设置事件监听器,该监听器将凭证令牌添加到方言的连接调用中。更详细地讨论了这一点,可以参考生成动态认证令牌。...一种方法是在引擎上设置事件侦听器,以将凭据令牌添加到方言的连接调用中。关于这一点,可以在 生成动态认证令牌 中进行更一般的讨论。

    57310

    SqlAlchemy 2.0 中文文档(三)

    将对象添加到会话 为了逐步说明添加过程,我们将创建一个不使用上下文管理器的 Session(因此我们必须确保稍后关闭它!)...一旦对象使用 Session.add() 添加到 Session 中,工作单元过程会自动代表我们发出 INSERT/UPDATE/DELETE,因为我们的对象属性被创建和修改。...将对象添加到会话 为了逐步说明添加过程,我们将创建一个不使用上下文管理器的Session(因此我们必须确保稍后关闭它!)...一旦对象使用 Session.add() 添加到 Session 中,工作单元过程将自动代表我们发出 INSERT/UPDATE/DELETE,因为我们的对象属性被创建和修改。...它使用一个 SELECT 形式,在大多数情况下可以针对相关表单独发出,而无需引入 JOIN 或子查询,并且仅查询那些集合尚未加载的父对象。

    41520

    SqlAlchemy 2.0 中文文档(五)

    在下面的示例中,User.bio 列将不会默认加载,而只在访问时加载: from sqlalchemy.orm import deferred user_table = Table( "user...因为 PostgreSQL 的 CREATE TYPE 要求为要创建的类型有一个显式的名称,所以在处理隐式生成的 Enum 而没有在映射中指定显式的 Enum 数据类型时,存在特殊的回退逻辑: 如果...在使用单表继承的特定情况下,还可以将其他 Column 对象添加到映射中,其中在映射的子类上存在其他列,这些列没有自己的 Table。这在 单表继承 部分有说明。...给出了一个关于现有 Table 对象的命令式表映射的示例,在该表中没有声明任何主键(在反射场景中可能会发生),我们可以将这样的表映射为以下示例中的方式: from sqlalchemy import Column...给出了一个关于现有 Table 对象的命令式表映射的示例,在该表中没有声明任何主键(在反射场景中可能会发生),我们可以将这样的表映射为以下示例中的方式: from sqlalchemy import Column

    29610
    领券