Note that there are some explanatory texts on larger screens.

plurals
  1. POadd an object in sqlalchemy with relationship
    text
    copied!<p>I want to add a object into database using relationship, the code is blow:</p> <p>the code run in eclipse, database is postgresql</p> <pre><code>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 </code></pre> <p>create engine and session</p> <pre><code>engine = create_engine("postgresql+psycopg2://openpg:openpgpwd@localhost:5432/testdb", echo=True) Session = sessionmaker(bind = engine) session = Session() metadata = MetaData() </code></pre> <p>create User and Address class </p> <pre><code>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='jack@google.com'),Address (email_address='jack@yahoo.com')] session.add(jack) session.commit() </code></pre> <p>run in eclipse, the result is:</p> <pre><code> Traceback (most recent call last): File "D:\workspace\test1\dbtest\testrelationship.py", line 68, in &lt;module&gt; jack.addresses = [Address(email_address='jack@google.com'),Address (email_address='jack@yahoo.com')] TypeError: __init__() takes exactly 3 arguments (2 given) </code></pre> <p>I don't know how to resolve the problem, thank you!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload