Hier ist mein Beispielcode. Der Agent hat höchstens eine Kampagne.
from sqlalchemy.orm.session import make_transient
def clone_agent(id):
s = app.db.session
agent = s.query(Agent).get(id)
c = None
# you need get child before expunge agent, otherwise the children will be empty
if agent.campaigns:
c = agent.campaigns[0]
s.expunge(c)
make_transient(c)
c.id = None
s.expunge(agent)
agent.id = None
# I have unique constraint on the following column.
agent.name = agent.name + '_clone'
agent.externalId = - agent.externalId # find a number that not in db.
make_transient(agent)
s.add(agent)
s.commit() # commit so the agent will save to database and get an id
if c:
assert agent.id
c.agent_id = agent.id # attatch child to parent. agent_id is a foreign key
s.add(c)
s.commit()
Wie haben Sie das 'Graph Walking' implementiert? Gibt es einen Beispielcode, den Sie einfügen können? Prost. (Ich habe eine übergeordnete Zeile mit vielen untergeordneten Zeilen, von denen jede mehr untergeordnete Zeilen hat, und ich möchte einen Klon der übergeordneten Zeile in einer Tabelle erstellen und automatisch alle zugehörigen Zeilen in untergeordnete und untergeordnete Zeilen klonen Tabellen.) – Soferio
Ich habe gerade diese alte Diskussion gefunden, und ich nehme an, dass dies beantwortet. Es muss manuell durchgeführt werden: https://groups.google.com/forum/#!topic/sqlalchemy/wb2M_oYkQdY – Soferio
Ja, iterieren Sie die Behälter und die Beziehungen manuell folgen. –