Python 通过 SQLAlchemy 列出到 PostgreSQL HSTORE
Python list to PostgreSQL HSTORE via SQLAlchemy
我想使用 SQLAlchemy 将包含列表的字典作为 HSTORE 对象存储在 PostgreSQL 数据库中。关注我的 table class.
from sqlalchemy.dialects.postgresql import HSTORE
from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Data(Base):
id = Column(String, primary_key=True)
data = Column(HSTORE)
我在下面的事情中插入我的项目。
data = Data(
id='fancy_id',
data={
'foo': ['bar', 'bar']
},
)
db.Session.add(scan)
db.Session.commit()
这会导致发生回滚并引发以下异常。
sqlalchemy.exc.DataError: (psycopg2.errors.ArraySubscriptError) wrong number of array subscripts
[SQL: INSERT INTO data (id, data) VALUES (%(id)s, %(data)s)]
[parameters: {'id': 'fancy_id', 'data': {'foo': ['bar', 'bar']}}]
但是,插入在没有列表的情况下也有效。
data = Data(
id='fancy_id',
data={
'foo': 'bar'
},
)
我按照 PostgreSQL SQLAlchemy 1.4 documentation 进行操作,但没有发现指示此限制的注释。我错过了什么吗?如何通过 SQLAlchemy 将 Python 列表存储在 PostgreSQL HSTORE 对象中?
提前致谢。
老实说,对于这种事情,json/jsonb
会是一个更好的选择。然后你将直接映射 Python 带列表的字典到带数组的 JSON 对象。如果你想使用 hstore
那么:
create table hstore_test(id int, hs_fld hstore);
insert into hstore_test values (1, 'a=>1');
insert into hstore_test values (1, 'b=>"[1,2]"'::hstore);
select * from hstore_test ;
id | hs_fld
----+--------------
1 | "a"=>"1"
1 | "b"=>"[1,2]"
--So for your example
data={
'foo': "['bar', 'bar']"
},
我想使用 SQLAlchemy 将包含列表的字典作为 HSTORE 对象存储在 PostgreSQL 数据库中。关注我的 table class.
from sqlalchemy.dialects.postgresql import HSTORE
from sqlalchemy import Column, String
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Data(Base):
id = Column(String, primary_key=True)
data = Column(HSTORE)
我在下面的事情中插入我的项目。
data = Data(
id='fancy_id',
data={
'foo': ['bar', 'bar']
},
)
db.Session.add(scan)
db.Session.commit()
这会导致发生回滚并引发以下异常。
sqlalchemy.exc.DataError: (psycopg2.errors.ArraySubscriptError) wrong number of array subscripts
[SQL: INSERT INTO data (id, data) VALUES (%(id)s, %(data)s)]
[parameters: {'id': 'fancy_id', 'data': {'foo': ['bar', 'bar']}}]
但是,插入在没有列表的情况下也有效。
data = Data(
id='fancy_id',
data={
'foo': 'bar'
},
)
我按照 PostgreSQL SQLAlchemy 1.4 documentation 进行操作,但没有发现指示此限制的注释。我错过了什么吗?如何通过 SQLAlchemy 将 Python 列表存储在 PostgreSQL HSTORE 对象中?
提前致谢。
老实说,对于这种事情,json/jsonb
会是一个更好的选择。然后你将直接映射 Python 带列表的字典到带数组的 JSON 对象。如果你想使用 hstore
那么:
create table hstore_test(id int, hs_fld hstore);
insert into hstore_test values (1, 'a=>1');
insert into hstore_test values (1, 'b=>"[1,2]"'::hstore);
select * from hstore_test ;
id | hs_fld
----+--------------
1 | "a"=>"1"
1 | "b"=>"[1,2]"
--So for your example
data={
'foo': "['bar', 'bar']"
},