Forget the old code. I needed to use make_transient()

This example code work nearly fine (FOREIGN KEY constraints not used in
sqlite)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sqlalchemy as sa
import sqlalchemy.ext.declarative as sad
import sqlalchemy.orm as sao
import sqlalchemy.orm.session as sas
from sqlalchemy_utils import create_database

_Base = sad.declarative_base()

class Child(_Base):
    __tablename__ = 'Child'

    _oid = sa.Column('oid', sa.Integer, primary_key=True)
    _name = sa.Column('name', sa.String)

    def __init__(self, name):
        self._name = name


class Parent(_Base):
    __tablename__ = 'Parent'

    _oid = sa.Column('oid', sa.Integer, primary_key=True)
    _name = sa.Column('name', sa.String)
    _child_fk = sa.Column('child', sa.Integer,
    sa.ForeignKey('Child.oid')) _child = sao.relationship('Child')

    def __init__(self, name):
        super(Parent, self).__init__()
        self._name = name


pstr = 'postgres://postgres@localhost/Family'
sstr = 'sqlite:///family.db'

pengine = sa.create_engine(pstr, echo = True)
sengine = sa.create_engine(sstr, echo = True)

def createPostgreSQL_Family():
    """Create for PostgreSQL the scheme and the data for testing."""

    # create schema
    create_database(pengine.url)
    _Base.metadata.create_all(pengine)
    psession = sao.sessionmaker(bind = pengine)()

    # child
    c = Child('Jim Bob')
    psession.add(c)
    psession.commit()

    # parent
    p = Parent('Mr. Doe')
    p._child = c
    psession.add(p)
    psession.commit()

    psession.close()

def convert():
    # get one object from the PostgreSQL database
    psession = sao.sessionmaker(bind = pengine)()

    p = psession.query(Parent).first()
    sas.make_transient(p)
    #p._oid = None

    c = psession.query(Child).first()
    sas.make_transient(c)
    #c._oid = None

    psession.close()

    # create and open the SQLite database
    create_database(sengine.url)
    _Base.metadata.create_all(sengine)

    # add/convert the one object to the new database
    ssession = sao.sessionmaker(bind = sengine)()

    ssession.add(c)
    ssession.add(p)
    ssession.commit()

if __name__ == '__main__':
    #createPostgreSQL_Family()
    convert()

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to