与SQLalchemy建立关系

时间:2014-08-11 17:28:21

标签: python sqlalchemy

我对python脚本感到很痛苦,该脚本应该在现有数据库中插入数据。 这是我的问题(没有所有复杂性:))

我的数据库包含许多表格,我对其中的4个感兴趣。它们也被django应用程序使用,但在这里我只是在做python脚本。这是一个简化的model.py

model.py

from __future__ import unicode_literals
from django.db import models

class TService(models.Model):
    name = models.CharField(max_length=45, blank=True)

class TLocation(models.Model):
    name = models.CharField(max_length=45, blank=True)

class TStatus(models.Model):
    name = models.CharField(max_length=45, blank=True)

class LServicehasstatus(models.Model):
     t_service_idservice = models.ForeignKey('TService', db_column='T_Service_idService', blank=True, null=True) 
     t_status_idstatus = models.ForeignKey('TStatus', db_column='T_Status_idStatus', blank=True, null=True) 
     t_location_idlocation = models.ForeignKey('TLocation', db_column='T_Location_idLocation', blank=True, null=True)

因此,位置,服务和状态之间存在关联

我试图使用SQLAlchemy用python脚本填充此LServicehasstatus表。 我可以解析并检索所有内容但不插入数据。

脚本:

Base = automap_base()

    engine = create_engine('mysql://xxxxxxxxxxxxxxxx')

    Base.prepare(engine, reflect=True)
    Session = sessionmaker(bind = engine)
    session = Session()

    Location = Base.classes.common_tlocation
    Services = Base.classes.common_tservice
    Status = Base.classes.common_tstatus

#Not working
    statusupdate = Servicehasstatus(\
        Servicehasstatus.T_Service_idService=="2",\
        Servicehasstatus.T_Host_idLocation=="1",\
        Servicehasstatus.T_Status_idStatus=="1")
    session.add(statusupdate)
    session.commit()

错误是:

ERROR: __init__() takes exactly 1 argument (4 given)

我认为我的方法不好我不能直接给出外键,我想我应该将现有的对象映射到它但我真的无法弄清楚如何。

非常感谢你的帮助,

1 个答案:

答案 0 :(得分:0)

此问题与任何关系无关,而是与您Servicehasstatus()的调用方式有关。默认构造函数接受关键字args并将它们分配给attrs。该行应如下所示:

statusupdate = Servicehasstatus(
    T_Service_idService=2,
    T_Host_idLocation=1,
    T_Status_idStatus=1
)

错误是标准的Python TypeError,虽然它有点神秘。这意味着该类的__init__方法采用1个位置参数(self),但是给出(self)以及其他三个值。