Here for example the code I use to transfer a table from my src DB to dst DB

#!/usr/bin/env python


import getopt
import sys
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
#from joblib import Parallel, delayed


def make_session(connection_string):
    engine = create_engine(connection_string, echo=True, encoding='utf8')
    Session = sessionmaker(bind=engine)
    Base = declarative_base()
    return Session(), engine


def create_all_tables(metadata):
    for table_name in metadata.tables.keys():
        exec('global '+str(table_name)+'; '+str(table_name)+' = 
metadata.tables[table_name]')
        print table_name
    print 'TABLE CLASSES ARE CREATED !!!'


def pull_data(from_db, to_db, tables):
    source, sengine = make_session(from_db)
    smeta = MetaData(bind=sengine)
    smeta.reflect(bind=sengine)
    destination, dengine = make_session(to_db)
    
    for table_name in tables:
        print 'Processing', table_name
        print 'Pulling schema from source server'
        # table = Table(table_name, smeta, autoload=True)
        table = smeta.tables[table_name]
        print 'Creating table on destination server'
        # table.metadata.create_all(dengine)
        table.create(dengine, checkfirst=True)
        data = sengine.execute(table.select()).fetchall()
        if data:
            print (table.insert())
            dengine.execute(table.insert(), data)
    
    print 'Finished!'
        


def print_usage():
    print """
Usage: %s -f source_server -t destination_server table [table ...]
    -f, -t = driver://user[:password]@host[:port]/database


Example: %s -f oracle://someuser:PaSsWd@db1/TSH1 \\
    -t mysql://root@db2:3307/reporting table_one table_two
    """ % (sys.argv[0], sys.argv[0])


def quick_mapper(table):
    Base = declarative_base()
    class GenericMapper(Base):
        __table__ = table
    return GenericMapper


# Call this from terminal
if __name__ == '__main__':
    optlist, tables = getopt.getopt(sys.argv[1:], 'f:t:')


    options = dict(optlist)
    if '-f' not in options or '-t' not in options or not tables:
        print_usage()
        raise SystemExit, 1


    pull_data(
        options['-f'],
        options['-t'],
        tables,
    )





And this is the error I get form my table

sqlalchemy.exc.IntegrityError: (IntegrityError) (1452, 'Cannot add or 
update a child row: a foreign key constraint fails (`s...



On Friday, 10 October 2014 17:44:24 UTC+3, Michael Bayer wrote:
>
>
> On Oct 10, 2014, at 10:30 AM, Eren Gölge <eren...@gmail.com <javascript:>> 
> wrote: 
>
> > I try to do basic ETL job with SQLalchemy but it always enforces 
> relations between tables. 
>
> SQLAlchemy doesn’t do anything like that.  I think you are referring to 
> the FOREIGN KEY constraints that are within your database. 
>
>
> > I only like to copy the tables with the raw data inside without the 
> considration of table relations. How can I drop all those relations from 
> the DB metadata and copy the tables. 
>
> You can drop or possibly temporarily disable FOREIGN KEY constraints on 
> the database side.  How this is done depends on the kind of database you’re 
> using.  For example, with MySQL, it’s very easy, use FOREIGN_KEY_CHECKS: 
> http://www.sqlines.com/mysql/set_foreign_key_checks. 
>
>
> > In addition I also need to create tables if they are not exist. The use 
> of create_all() function does not meet my needs because of the 
> aforementioned problems. 
>
> I don’t understand how an existing foreign key constraint interferes with 
> the processing of a CREATE TABLE statement, you’d have to illustrate a 
> specific example.

-- 
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