Я использую существующую базу данных, созданную третьей стороной с помощью sqlalchemy. Однако у меня возникли проблемы, так как в таблицах нет первичных ключей, и, что еще хуже, в каждой строке есть повторяющиеся элементы, поэтому я не могу выбрать существующий столбец в качестве первичного ключа. Таблицы имеют два столбца: обе имеют неуникальные значения.
Я попытался обезопасить таблицу согласно http://www.blog.pythonlibrary.org/2010/09/10/sqlalchemy-connecting-to-pre-existing-databases/, но, видимо, это не работает (см. Ниже)
Мой текущий код (MirnaTable
- это мой отображенный класс, в основном просто скелет, и ничего больше)
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()
Тогда я пытаюсь, например, выдать
all_records = session.query(MirnaTable).all()
И я получаю
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' ()
Так что, конечно, столбец id не найден. Есть идеи, что я делаю не так? Заранее спасибо.
РЕДАКТИРОВАТЬ: По запросу, вот пример из таблицы (полученной непосредственно из 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