Bonjour,
on dirait que vous avez créé la base puis vous vous y connectez avec avec peewee. Or on dirait que peewee fait quelques trucs quand c'est lui qui crée les tables (notamment il rajoute des clés primaires même si elles ne sont pas explicitement définies dans les modèles). C'est probablement cette clé primaire manquante qui provoque l'erreur.
L'exemple suivant se comporte comme prévu :
from peewee import *
db = SqliteDatabase('test.db', pragmas={'foreign_keys': 1})
class BaseModel(Model):
class Meta:
database = db
class Person(BaseModel):
name = CharField()
class Car(BaseModel):
name = CharField()
person_id = ForeignKeyField(Person)
db.connect()
db.create_tables([Person, Car])
alice = Person.create(name='Alice')
bob = Person.create(name='Bob')
for person in Person.select():
print(person.id, person.name)
# sortie
# 1 Alice
# 2 Bob
twingo = Car.create(name='Twingo', person_id=alice)
agila = Car.create(name='Agila', person_id=bob)
mustang = Car.create(name='Mustang', person_id=alice)
for car in Car.select():
print(car.id, car.name, car.person_id)
# sortie
# 1 Twingo 1
# 2 Agila 2
# 3 Mustang 1
q = Car.select().join(Person).where(Person.name == 'Alice')
for car in q:
print(car, car.name, car.person_id.name)
# sortie
# 1 Twingo Alice
# 3 Mustang Alice
db.close()
Ceci dit, je ne connaissais pas peewee jusqu'à hier, donc à prendre avec des pincettes.
# base créée par peewee ?
Posté par audionuma (site web personnel, Mastodon) . En réponse au message Peewee et les clés étrangères. Évalué à 2.
Bonjour,
on dirait que vous avez créé la base puis vous vous y connectez avec avec peewee. Or on dirait que peewee fait quelques trucs quand c'est lui qui crée les tables (notamment il rajoute des clés primaires même si elles ne sont pas explicitement définies dans les modèles). C'est probablement cette clé primaire manquante qui provoque l'erreur.
L'exemple suivant se comporte comme prévu :
Ceci dit, je ne connaissais pas peewee jusqu'à hier, donc à prendre avec des pincettes.