Tôi đang sử dụng cơ sở dữ liệu hiện có được thực hiện bởi một bên thứ ba với sqlalchemy. Tuy nhiên, tôi gặp rắc rối vì các bảng không có các khóa primar, và những gì tệ hơn, chúng có các phần tử trùng lặp cho mỗi hàng, vì vậy tôi không thể chọn một cột hiện có làm khóa chính. Các bảng có hai cột: cả hai đều có giá trị không phải là duy nhất.Python sqlalchemy: bảng không có khóa chính và giá trị trùng lặp?
Tôi cố gắng để con khỉ-vá bảng như mỗi http://www.blog.pythonlibrary.org/2010/09/10/sqlalchemy-connecting-to-pre-existing-databases/ nhưng dường như điều này không làm việc (xem dưới đây)
mã hiện tại của tôi là (MirnaTable
là lớp ánh xạ của tôi, về cơ bản chỉ là một bộ xương với không có gì khác)
connection = create_engine("sqlite:///targets.sqlite")
metadata = MetaData(bind=connection)
db_table = Table("miranda", metadata,
Column("id", Integer, primary_key=True),
autoload=True)
mapper(MirnaTable, db_table)
Session = sessionmaker(connection)
session = Session()
Sau đó, tôi thử ví dụ ban hành
all_records = session.query(MirnaTable).all()
Và tôi nhận
sqlalchemy.exc.OperationalError: (OperationalError) no such column: miranda.id
u'SELECT miranda.gene_id AS miranda_gene_id, miranda."mature_miRNA" AS
"miranda_mature_miRNA", miranda.id AS miranda_id \nFROM miranda'()
Vì vậy, tất nhiên không tìm thấy cột id. Bất kỳ ý tưởng về những gì tôi đang làm sai? Cảm ơn trước.
EDIT: Theo yêu cầu, đây là một ví dụ từ bảng (lấy trực tiếp từ sqlite):
gene mature_miRNA
---- -------------
80205 hsa-miR-200c
80205 hsa-miR-200c
9693 hsa-miR-200c
9693 hsa-miR-200c
9881 hsa-miR-200c
9710 hsa-miR-200c
9750 hsa-miR-200c
Bạn có thể đăng bảng với dữ liệu ví dụ xin vui lòng ? – JackalopeZero
Xong: có một mẫu về loại dữ liệu bạn có thể mong đợi bây giờ. – Einar
ORM sẽ không hoạt động nếu không có thứ gì đó có thể phục vụ như một danh tính của hàng. Xem xét sử dụng bảng trực tiếp mà không cần ánh xạ nó vào lớp. –