J'utilise une base de données existante faite par un tiers avec sqlalchemy. Cependant, j'ai des problèmes car les tables n'ont pas de clés primaires et, ce qui est pire, elles ont des éléments en double pour chaque ligne, donc je ne peux pas choisir une colonne existante comme clé primaire. Les tables ont deux colonnes: les deux ont des valeurs non uniques.Python sqlalchemy: table sans clé primaire et sans doublon?
J'ai essayé de singe-patch la table par http://www.blog.pythonlibrary.org/2010/09/10/sqlalchemy-connecting-to-pre-existing-databases/ mais apparemment cela ne fonctionne pas (voir ci-dessous)
Mon code actuel est (MirnaTable
est ma classe mappée, fondamentalement juste un squelette avec rien d'autre)
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()
Ensuite, j'essaie par exemple l'émission
all_records = session.query(MirnaTable).all()
Et je reçois
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'()
Alors bien sûr, la colonne id n'est pas trouvée. Des idées sur ce que je fais mal? Merci d'avance.
EDIT: Comme l'a demandé, voici un exemple de la table (récupérée directement à partir 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
Pourriez-vous poster la table avec des données par exemple s'il vous plaît ? – JackalopeZero
Fait: il existe un échantillon du type de données auquel vous pouvez vous attendre maintenant. – Einar
ORM ne fonctionnera pas sans quelque chose qui peut servir d'identité de ligne. Pensez à utiliser la table directement sans la mapper en classe. –