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