Ich versuche, eine Datenbank ORM mit peewee einrichten und bin nicht klar auf die Verwendung von Fremdschlüssel Beziehungen. SpäterFremdschlüssel Beziehung mit Peewee und Python
from peewee import *
db = SqliteDatabase('datab.db')
class datab(Model):
class Meta:
database = db
class Collection(datab):
identifier = CharField()
title = CharField()
class File(datab):
identifier = ForeignKeyField(Collection, related_name='files')
name = CharField()
, mache ich einen Import von "Sammlungen"
for value in collection:
Collection(**value).save()
Schließlich, wo ich Probleme fügt die Dateien in den Sammlungen
for value in collectionFiles:
File(**value).save()
Im Wert dict, Es gibt ein Schlüsselwortpaar mit dem Schlüssel "identifier" und einen Wert, der dem Schlüsselwort Collection identifier zugeordnet werden sollte.
Allerdings erhalte ich eine Fehlermeldung:
ValueError: invalid literal for int() with base 10: 'somevalue'
Wenn ich die Datei (datab) ändern: Bezeichner Typ VarChar, sie die Daten gespeichert werden.
Ich merke, dass ich es falsch mache. Meine Annahme war, dass der eindeutige Bezeichnerwert in jeder Tabelle den Fremdschlüssel anwenden würde. Nach dem Lesen der Dokumentation sieht es so aus, als ob die Fremdschlüsseleinstellung etwas anders ist. Muss ich etwas tun wie
Collections.File.files (** Werte) .save()? Mit anderen Worten, anstatt einen Datenimport zu machen, das Sammelobjekt zu laden und dann die Datei zugeordneten Felder durch peewee hinzuzufügen?
Werte, die Klasse Datei
{'crc32': '63bee49d',
'format': 'Metadata',
'identifier': u'somevalue',
'md5': '34104ffce9e4084fd3641d0decad910a',
'mtime': '1368328224',
'name': 'lupi.jpg_meta.txt',
'sha1': '1448ed1159a5d770da76067dd1c53e94d5a01535',
'size': '1244'}
Danke, ich habe gesehen, dass die Fremdschlüssel eine Modellinstanz sind, aber die Implementierung war unklar. Es gibt mehr Felder für Sammlung und Dateimodelle als das, was ich hier gezeigt habe - weshalb ich die Kwargs verwende. Ich denke, mit den zwei Antworten werde ich das herausfinden können. – Justin
danke! Ich konnte es in Gang bringen. – Justin