【发布时间】:2022-08-24 02:12:01
【问题描述】:
我有一个包含两列的预填充数据库。列 \'A\' 是一个唯一的 id,它只是一个整数,而列 \'B\' 只是一些字符串。
我想创建一个新列,它只是两列的字符串连接。
我将如何使用server_default 做到这一点?
谢谢!
-
您使用哪个 RDBMS 作为后端?计算列是否可以,或者它必须是默认值?
-
PostgreSQL。我不介意这些值是如何计算的。
标签: sqlalchemy
我有一个包含两列的预填充数据库。列 \'A\' 是一个唯一的 id,它只是一个整数,而列 \'B\' 只是一些字符串。
我想创建一个新列,它只是两列的字符串连接。
我将如何使用server_default 做到这一点?
谢谢!
标签: sqlalchemy
您可以使用 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')),
)
请注意,该列不能独立于a 和b 进行更新。
将相同的表达式传递给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,
【讨论】: