我想使用 SQLAlchemy 將包含串列的 Python 字典作為 HSTORE 物件存盤在 PostgreSQL 資料庫中。跟隨我的餐桌課。
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()
這會導致發生 ROLLBACK 并引發以下例外。
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 檔案,但找不到說明此限制的注釋。我錯過了什么嗎?如何通過 SQLAlchemy 在 PostgreSQL HSTORE 物件中存盤 Python 串列?
提前致謝。
uj5u.com熱心網友回復:
老實說,對于這種事情json/jsonb將是一個更好的選擇。然后,您將直接將帶有串列的 Python dict 映射到帶有陣列的 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']"
},
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/321691.html
標籤:Python PostgreSQL sqlalchemy psycopg2 商店
上一篇:從列中拆分資料并插入到postgresql中的另一個表
下一篇:記錄C語言學習歷程1
