Felicia.H
Felicia.H

Reputation: 361

How to use sqlAlchemy table shema to load data

I have two scripts schema.py and load_data.py. In schema.py, I define the schema for over 20 tables using sqlAlchemy Base. Two of the tables look like:

schema.py

Base = declarative_base()
meta = MetaData()

class Table1(Base):
    __tablename__ = 'table1'
    id = Column(Integer, primary_key=True)
    name = Column(String)

class Table2(Base):
    __tablename__ = 'table2'
    id = Column(Integer, primary_key=True)
    bdate = Column(Date)
...
class Table20(Base):
    __tablename__ = 'table20'
    id = Column(Integer, primary_key=True)
    bdate = Column(Date)

I want to use my load_data.py to copy those ~20 tables from one database to another. My question is how to create the table in load_data.py using the schema I defined in schema.py?? Following the examples in Introductory Tutorial of Python’s SQLAlchemy, I use import to load all the table schema class, but I find it too messy. Is there any better way to handle this situation??? I am new to sqlAlchemy,please bear me if this question seems too naive.

load_data.py

from schema import Base, Table1, Table2, Table3, Table4, Table5, Table6, Table7, Table8, Table9, Table10,..., Table20

src_engine = create_engine('sqlite:// sqlite_test.db')
dst_engine = create_engine('postgresql:///postgresql_test.db')

Base.metadata.create_all(dst_engine)

tables = Base.metadata.tables

for tbl in tables:
    data = src_engine.execute(tables[tbl].select()).fetchall()
    for a in data: print(a)
    if data:
        dst_engine.execute( tables[tbl].insert(), data)

Upvotes: 0

Views: 628

Answers (1)

eijen
eijen

Reputation: 439

Try from schema import *, which imports all members from a module. See also these answers regarding the difference between import schema and from schema import x.

Upvotes: 1

Related Questions