UnmappedInstanceError

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Mirela
User
Beiträge: 8
Registriert: Dienstag 7. Oktober 2008, 12:59

Hallo an alle,

ich habe wieder ein Problem wo ich nicht weiter komme wo ich auch nicht geeignetes im Internet drüber finde.

Die sache ist die:
Ich habe zwei Tabellen die in einer m:n Relation mitterinander in
Beziehung stehen. Das inser von daten in die Workshop und Reader table geht ohne Probleme aber das einlesen von Daten in die Secondary Table erzeugt unten aufgeführte Fehlermeldung.

Die Frage ist wiso erkennt Sqlalchemy nicht das das meine Secondary Table ist und das die schon gemapped ist. Ich finde einfach nicht zu insert von Daten in Secondary table währ toll wenn ihr mir weiterhelfen könntet.

Im voraus schon vielen Danke
Mirela

Code: Alles auswählen

Workshop_table=Table(
    'Workshop', bound_meta1,
    Column('Workshop_ID', Integer, primary_key=True),
    Column('Study', Text(200)), 
    Column('Date',String(12)),
    Column('Name', String(200)), 
    Column('Locetion', String(80)))

Reader_table=Table(
    'Reader',bound_meta1,
    Column('Person_ID', Integer, primary_key=True),
    Column('Date', Date),
    Column('Time', String(10)), 
    Column('PersonalDataReader_ID', Integer, ForeignKey('PersonalDataReader.PersonalDataReader_ID'), nullable=False))

# secondary table
ToAttend_table=Table(
    'ToAttend', bound_meta1,
    Column('Usability', String(80), nullable=True),
    Column('Comment', String(200), nullable=True),
    Column('Workshop_ID',Integer, ForeignKey('Workshop.Workshop_ID'), primary_key=True),
    Column('Person_ID', Integer, ForeignKey('Reader.Person_ID'), primary_key=True))

class Workshop(object):
    def __init__(self, Name, Study, Locetion, Date):
        self.Name=Name
        self.Study=Study
        self.Locetion=Locetion
        self.Date=Date
    def __repr__(self):
        return "<Workshop ('%s','%s','%s','%s')>" % (self.Name,self.Study,
                                                           self.Locetion, self.Date)

class Reader(object):
    def __init__(self, Date, Time, PersonalDataReader_ID):
        self.Date=Date
        self.Time=Time
        self.PersonalDataReader_ID=PersonalDataReader_ID
    def __repr__(self):
        return "<Reader_table ('%s','%s','%s')>" % (self.Date, self.Time, self.PersonalDataReader_ID)

class ToAttend(object):
    def __init__(self, Usability,Comment, Workshop_ID, Person_ID):
        self.Usability=Usability
        self.Comment=Comment
        self.Workshop_ID=Workshop_ID
        self.Person_ID=Person_ID
    def __repr__(self):
        return "<ToAttend_table ('%s', '%s','%s', '%s')>"%(self.Usability, self.Comment, self.Worksop_ID, self.Person_ID)
mapper(Workshop, Workshop_table, properties={        'toattendWorkshop' :relation(Reader, secondary=ToAttend_table, backref='Workshop')})

mapper(Reader, Reader_table, properties={
'toattendReader':relation(Workshop, secondary=ToAttend_table, backref='Reader')})

Traceback (most recent call last):
  File "K:\Datenbanken Projekt\Python Parser\Parser_Doppelpath.py", line 1177, in <module>
    values=Parsing(withoutdupfile, withoutduppath)
  File "K:\Datenbanken Projekt\Python Parser\Parser_Doppelpath.py", line 319, in Parsing
    session.add(ToAttend_dateneinlesenTumor)
  File "c:\python25\lib\site-packages\sqlalchemy-0.5.0rc2-py2.5.egg\sqlalchemy\orm\session.py", line 1110, in add
    state = _state_for_unknown_persistence_instance(instance)
  File "c:\python25\lib\site-packages\sqlalchemy-0.5.0rc2-py2.5.egg\sqlalchemy\orm\session.py", line 1574, in _state_for_unknown_persistence_instance
    raise exc.UnmappedInstanceError(instance)
UnmappedInstanceError: Class '__main__.ToAttend' is not mapped
Zuletzt geändert von Mirela am Montag 10. November 2008, 17:48, insgesamt 4-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Bitte wenigstens in code-Tags oder am besten gleich in eine Paste-Bin(http://paste.pocoo.org/).
So kann man das ja nicht lesen.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Naja, der Fehler steht da ja schon:

Code: Alles auswählen

Class '__main__.ToAttend' is not mapped
Das heißt, folgende Zeile fehlt noch:

Code: Alles auswählen

mapper(ToAttend, ToAttend_table, properties={...})
Was da in properties rein muss, weiß ich nicht. Das muss also noch angepasst werden.
Mirela
User
Beiträge: 8
Registriert: Dienstag 7. Oktober 2008, 12:59

So einfach ist das nicht.

Wie du oben entnehmen kannst habe ich zwei tabellen die in einer m:n Beziehung miteinander stehen. Aus dieser Beziehung geht die Tabelle ToAttend hervor. Die sogenannte secondary table.
Wenn ich sie mappen würde müsste ich sie auch in relation setzen das wüsste ich nicht wie ohne mein Datenbank zu verfälschen.
Antworten