SqlAlchemy - ForeignKey Verständnisproblem
Verfasst: Freitag 4. Juni 2021, 13:55
Hallo,
wenn ich das richtig verstanden habe, sorgt ein ForeignKey dafür, dass in der Child Tabelle (bei mir: comments) nur Werte eingegeben werden können, die in den Parent Tabellen enthalten sind. So stehts zumindest hier:
https://www.w3schools.com/sql/sql_foreignkey.asp
Ich habe 3 Tabellen: users, articles, comments
Jeder Comment hat nur einen User und nur einen Article, aber jeder Article kann viele Comments von vielen Nutzern haben.
Ich habe 2 user und 2 article angelegt, denen werden jeweils die ids 1 und 2 vergeben. Es gibt also in der ganzen Datenbank keine id, die größer als 2 ist. Trotzdem kann ich einen Comment anlegen, dessen foreign keys größer als 2 sind - diese sind also definitiv nicht vorhanden in den Partent Tabellen.
Ist das nicht ein Widerspruch zur ForeignKey constraint?
wenn ich das richtig verstanden habe, sorgt ein ForeignKey dafür, dass in der Child Tabelle (bei mir: comments) nur Werte eingegeben werden können, die in den Parent Tabellen enthalten sind. So stehts zumindest hier:
https://www.w3schools.com/sql/sql_foreignkey.asp
Ich habe 3 Tabellen: users, articles, comments
Jeder Comment hat nur einen User und nur einen Article, aber jeder Article kann viele Comments von vielen Nutzern haben.
Code: Alles auswählen
from sqlalchemy import Column, Integer, String, create_engine, ForeignKey
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite:///Database.db', echo = True)
Base = declarative_base()
#tables
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
class Article(Base):
__tablename__ = 'articles'
id = Column(Integer, primary_key=True)
title = Column(String)
content = Column(String)
class Comment(Base):
__tablename__ = 'comments'
id = Column(Integer, primary_key=True)
comment = Column(String)
article_id = Column(Integer, ForeignKey('articles.id'))
user_id = Column(Integer, ForeignKey('users.id'))
Base.metadata.create_all(engine)
#session
Session = sessionmaker(bind = engine)
session = Session()
#fill tables
user1 = User(name = "user 1")
user2 = User(name = "user 2")
article1 = Article(title = 'title 1', content = 'lorem ipsum 1')
article2 = Article(title = 'title 2', content = 'lorem ipsum 2')
comment1 = Comment(comment = 'coment 1', article_id = 3, user_id = 4)
session.add_all([user1, user2, article1, article2, comment1])
session.commit()
Ist das nicht ein Widerspruch zur ForeignKey constraint?