我对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)
我认为我的方法不好我不能直接给出外键,我想我应该将现有的对象映射到它但我真的无法弄清楚如何。
非常感谢你的帮助,
答案 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)以及其他三个值。