Tôi đang sử dụng SQLAlchemy 0.6.3 với PostgreSQL 8.4 trên Debian squeeze. Tôi muốn một bảng nơi một cột lưu trữ một cái gì đó trong PostgreSQL hiển thị trong Python như là một danh sách các danh sách số nguyên hoặc bộ dữ liệu của các bộ nguyên. Ví dụ.Các mảng đa chiều PostgreSQL trong SQLAlchemy
((1,2), (3,4), (5,6,7))
Trong ví dụ bên dưới cột đó là model
. Tôi nghĩ rằng một cách tiếp cận hợp lý có thể là để lưu trữ các công cụ như một bảng PG 2 chiều, mà trong PG trông giống như integer[][]
. Tôi không biết ở dạng nào SQLA sẽ trả về điều này cho Python, nhưng tôi hy vọng nó giống như một bộ tuple.
Tuy nhiên, tôi không thể tìm ra cách để cho SQLA cung cấp cho tôi mảng Integer hai chiều. documentation cho sqlalchemy.dialects.postgresql.ARRAY
nói
item_type - Kiểu dữ liệu của các mục của mảng này. Lưu ý rằng kích thước không liên quan ở đây, vì vậy mảng đa chiều như INTEGER [] [], được tạo thành ARRAY (Số nguyên), không phải là ARRAY (ARRAY (Số nguyên)) hoặc như vậy. Các loại hình lập bản đồ con số trên bay.
Thật không may, tôi không biết điều đó có nghĩa là gì. Làm thế nào để ánh xạ kiểu có thể phát hiện ra điều này khi đang bay? Nó cần phải tạo DDL đúng. Dự đoán đầu tiên và duy nhất của tôi về cách thực hiện điều này sẽ là ARRAY(ARRAY(Integer))
. Hiện nay tôi có
crossval_table = Table(
name, meta,
Column('id', Integer, primary_key=True),
Column('created', TIMESTAMP(), default=now()),
Column('sample', postgresql.ARRAY(Integer)),
Column('model', postgresql.ARRAY(Integer)),
Column('time', Float),
schema = schema,
Điều này tạo ra DDL sau
CREATE TABLE crossval (
id integer NOT NULL,
created timestamp without time zone,
sample integer[],
model integer[],
"time" double precision
);
bị lỗi, tất nhiên. Tôi đang thiếu gì?
Nếu bạn định làm nhiều việc như thế thì bạn có thể sẽ không xem xét thời tiết một db quan hệ là lựa chọn tốt nhất cho bạn. – Mark
@Mark: Tôi không theo dõi. Rất nhiều thứ như thế nào? –
Nếu bạn đang cố gắng tồn tại rất nhiều mảng hoặc bản đồ của bản đồ, bạn có thể không xem xét cơ sở dữ liệu hỗ trợ khái niệm đó như lớp 1, ví dụ: redis – Mark