【问题标题】:SQLAlchemy setting server_default to values of other columnsSQLAlchemy 将 server_default 设置为其他列的值
【发布时间】:2022-08-24 02:12:01
【问题描述】:

我有一个包含两列的预填充数据库。列 \'A\' 是一个唯一的 id,它只是一个整数,而列 \'B\' 只是一些字符串。

我想创建一个新列,它只是两列的字符串连接。

我将如何使用server_default 做到这一点?

谢谢!

  • 您使用哪个 RDBMS 作为后端?计算列是否可以,或者它必须是默认值?
  • PostgreSQL。我不介意这些值是如何计算的。

标签: sqlalchemy


【解决方案1】:

您可以使用 Computed 列来保存该值:

import sqlalchmy as sa

tbl = sa.Table(
    't73280376',
    sa.MetaData(),
    sa.Column('a', sa.Integer, primary_key=True),
    sa.Column('b', sa.String),
    sa.Column('c', sa.String, sa.Computed('a::text || b')),
)

请注意,该列不能独立于ab 进行更新。

将相同的表达式传递给server_default

sa.Column('c', sa.String, server_default=sa.text('a::text || b'))

不生成有效的 DDL:

test# CREATE TABLE t73280376 (
test(#         a SERIAL NOT NULL, 
test(#         b VARCHAR, 
test(#         c VARCHAR DEFAULT a::text || b, 
test(#         PRIMARY KEY (a)
test(# )
test-# ;
ERROR:  cannot use column reference in DEFAULT expression
LINE 4:         c VARCHAR DEFAULT a::text || b,

【讨论】:

    猜你喜欢
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 2019-02-25
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多