2013-11-21 27 views

cevap

2

Bu nesneyi grafikte yürüterek ve grafikteki her nesnede exper(), make_transient() ve id = None adımlarını yaparak, SQLAlchemy: Modification of detached object'da açıklandığı gibi çalıştım.

+0

'Graf Walking'i nasıl uyguladınız? yapıştırabileceğiniz örnek kod var mı? Şerefe. (Çok sayıda alt satır içeren, her biri daha fazla satır içeren, üst satırdaki bir üst sırasım var ve bir tabloda üst satırın bir klonunu yapmak istiyorum ve ayrıca tüm ilgili satırları otomatik olarak çocuk ve büyük çocukta klonlamak istiyorum. tablolar.) – Soferio

+0

Bu eski tartışmayı yeni buldum ve sanırım bunu cevaplıyor. El ile yapılmalıdır: https://groups.google.com/forum/#!topic/sqlalchemy/wb2M_oYkQdY – Soferio

+1

Evet, kapsayıcıları yineleyin ve ilişkileri el ile takip edin. –

0

İşte örnek kodum. Temsilcinin en fazla bir kampanyası var.

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()