Lieu: Rechercher des commentaires publics (une chaîne) pour des instances d'éléments d'une liste prédéterminée. Il peut y avoir plusieurs correspondances de liste dans un seul commentaire.Ajout à une relation Many to Many avec SQLAlchemy
J'essaye d'employer un beaucoup à beaucoup structure pour garder la trace de ceci.
J'ai créé la structure de base de données suivante à l'aide SQLAlchemy (Python 3,5)
reddit_assoc = Table('reddit_assoc', Base.metadata,
Column('comment_id', Integer, ForeignKey('reddit_comments.comment_id')),
Column('character_id', Integer, ForeignKey('characters.character_id'))
)
class characters(Base):
__tablename__ ='characters'
character_id = Column(VARCHAR(20),primary_key=True)
name = Column(VARCHAR(3072))
added = Column('added', DateTime, default=datetime.datetime.now())
reddit_mentions = relationship('reddit_comments', secondary='reddit_assoc', back_populates='character_mentions')
class reddit_comments(Base):
__tablename__ = 'reddit_comments'
comment_id = Column(VARCHAR(50), primary_key=True)
comment_author = Column(VARCHAR(300))
comment_created = Column(VARCHAR(300))
link_id = Column(VARCHAR(50))
subreddit_id = Column(VARCHAR(50))
character_mentions = relationship('characters', secondary='reddit_assoc', back_populates='reddit_comments')
Et en utilisant les éléments suivants pour trouver des correspondances
def char_counter(comment):
Session = DBSession()
reader = Session.query(characters).all()
for char in reader:
if char[0] in comment['comment_body'] or char[1] in comment['comment_body']:
# We have a match. Add to database.
Session.merge(reddit_comments(#relevant information from comment#))
#How do I add to the Many to Many here?
Session.commit()
Session.close()
Problème: En regardant le commentaire dans la au-dessus de l'extrait, je ne comprends pas comment j'ajoute la relation de potentiellement plusieurs caractères correspond de la comm ent ['comment_body'] chaîne dans le reddit_assoc table d'assocation correctement. Quelqu'un peut-il s'il vous plaît conseiller plus loin?
S'il vous plaît noter que 'Session.merge()' retourne l'instance issue de la fusion comme une nouvelle instance, donc 'rc' n'est pas réellement ajouté à la session jusqu'à ce que' reader.reddit_mentions.append (rc) 'est appelée, et 2 lignes seront insérées au lieu d'une, si "information pertinente du commentaire" ne contient pas de clé primaire. Cela ne se produira pas d'autre part, car le code augmentera 'TypeError' à' Session.flush (rc) ', puisque' flush() 'attend une itération des objets d'instance. Enfin, 'lecteur' est une liste d'occurrences' characters', donc 'Session.add (reader)' sera également généré. –
Et bien sûr 'reader.reddit_mentions.append (rc)' serait également déclenché, car 'list' n'a pas d'attribut reddit_mentions. –
@ IljaEverilä yap, mon erreur, le changement de code – PerunSS