sqlalchemy + postgresql hstore 到字符串
sqlalchemy + postgresql hstore to string
如何将 sqlalchemy hstore 值转换为字符串?
from sqlalchemy.dialects.postgresql import array, hstore
hs = hstore(array(['key1', 'key2', 'key3']), array(['value1', 'value2', 'value3']))
# this triggers sqlalchemy.exc.UnsupportedCompilationError
str(hs)
我期待 "key1"=>"value1", "key2"=>"value2", "key3"=>"value3"
我想使用 sqlalchemy api 而不是编写一个接近我想要的自定义字符串格式化函数。我正在使用一个使用 sqlalchemy 的遗留代码库:我需要保留任何内部怪癖和 escaping 格式所做的逻辑。
但是,现有代码库通过 ORM table 插入使用 sqlalchemy,而我想直接将 sqlalchemy hstore 值转换为字符串?
更新:我正在尝试做这样的事情:
我有一个现有的 table 架构
create table my_table
(
id bigint default nextval('my_table_id_seq'::regclass),
ts timestamp default now(),
text_col_a text,
text_col_b text
);
我想让以下 Python sqlalchemy 代码工作:
str_value = some_function()
# Existing code is building an sqlalchemy hstore and inserting
# into a column of type `text`, not an `hstore` column.
# I want it to work with hstore text formatting
hstore_value = legacy_build_my_hstore()
# as is this triggers error:
# ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'hstore'
return db_connection.execute(
"""
insert into my_table(text_col_a, text_col_b) values (%s, %s)
returning id, ts
""",
(str_value, hstore_value).first()
让 Postgresql 为您进行转换,而不是尝试手动将 hstore
构造转换为字符串,SQLAlchemy 处理转换为合适的文本表示形式:
return db_connection.execute(
my_table.insert().
values(text_col_a=str_value,
text_col_b=cast(hstore_value, Text)).
returning(my_table.c.id, my_table.c.ts)).first()
尽快更改您的架构以使用 hstore 类型而不是文本,如果这是列包含的内容。
如何将 sqlalchemy hstore 值转换为字符串?
from sqlalchemy.dialects.postgresql import array, hstore
hs = hstore(array(['key1', 'key2', 'key3']), array(['value1', 'value2', 'value3']))
# this triggers sqlalchemy.exc.UnsupportedCompilationError
str(hs)
我期待 "key1"=>"value1", "key2"=>"value2", "key3"=>"value3"
我想使用 sqlalchemy api 而不是编写一个接近我想要的自定义字符串格式化函数。我正在使用一个使用 sqlalchemy 的遗留代码库:我需要保留任何内部怪癖和 escaping 格式所做的逻辑。
但是,现有代码库通过 ORM table 插入使用 sqlalchemy,而我想直接将 sqlalchemy hstore 值转换为字符串?
更新:我正在尝试做这样的事情:
我有一个现有的 table 架构
create table my_table
(
id bigint default nextval('my_table_id_seq'::regclass),
ts timestamp default now(),
text_col_a text,
text_col_b text
);
我想让以下 Python sqlalchemy 代码工作:
str_value = some_function()
# Existing code is building an sqlalchemy hstore and inserting
# into a column of type `text`, not an `hstore` column.
# I want it to work with hstore text formatting
hstore_value = legacy_build_my_hstore()
# as is this triggers error:
# ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'hstore'
return db_connection.execute(
"""
insert into my_table(text_col_a, text_col_b) values (%s, %s)
returning id, ts
""",
(str_value, hstore_value).first()
让 Postgresql 为您进行转换,而不是尝试手动将 hstore
构造转换为字符串,SQLAlchemy 处理转换为合适的文本表示形式:
return db_connection.execute(
my_table.insert().
values(text_col_a=str_value,
text_col_b=cast(hstore_value, Text)).
returning(my_table.c.id, my_table.c.ts)).first()
尽快更改您的架构以使用 hstore 类型而不是文本,如果这是列包含的内容。