0
添加对象我想利用关系的对象添加到数据库中,该代码是打击:在SQLAlchemy的有关系
在Eclipse中运行的代码,数据库PostgreSQL的
from sqlalchemy import Table, MetaData, Column, ForeignKey, Integer, String, Sequence
from sqlalchemy.orm import mapper, relationship, backref
from sqlalchemy.engine import create_engine
from sqlalchemy.orm.session import sessionmaker
创建引擎和会话
engine = create_engine("postgresql+psycopg2://openpg:[email protected]:5432/testdb", echo=True)
Session = sessionmaker(bind = engine)
session = Session()
metadata = MetaData()
创建用户和Address类
user = Table('user', metadata,
Column('id',Integer,Sequence('user_id_seq'),primary_key=True),
Column('name',String(50)),
Column('fullname',String(50)),
Column('password',String(12)))
class User(object):
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
address = Table('address', metadata,
Column('id', Integer,Sequence('address_id_seq'),primary_key=True),
Column('user_id',Integer,ForeignKey('user.id')),
Column('email_address',String(50)))
class Address(object):
def __init__(self, user_id, email_address):
self.user_id = user_id
self.email_address = email_address
mapper(User,user,properties = {'addresses': relationship(Address, backref=backref('user',order_by=address.c.id))})
mapper(Address, address)
if __name__ == '__main__':
jack = User('jack', 'Jack Bean', 'gjffdd')
jack.addresses = [Address(email_address='[email protected]'),Address (email_address='[email protected]')]
session.add(jack)
session.commit()
在Eclipse中运行,其结果是:
Traceback (most recent call last):
File "D:\workspace\test1\dbtest\testrelationship.py", line 68, in <module>
jack.addresses = [Address(email_address='[email protected]'),Address (email_address='[email protected]')]
TypeError: __init__() takes exactly 3 arguments (2 given)
我不知道如何解决这个问题,谢谢!
该代码是否逐字复制?因为你在地址(email_address='[email protected]')中有一些有问题的空间。应该是地址(email_address='[email protected]')'。 – JosefAssad 2013-04-28 10:46:32
空间不是重点,它只是我的疏忽。在原始的方案中,这是对的。@ JosefAssad – zimmer 2013-04-28 11:25:03