6

最近才开始使用python,我喜欢它!但是,我坚持使用 SqlAlchemy。

我正在尝试编写一个脚本来读取 MS SQL 数据库、查询表(所有字段,仅对某些字段进行过滤),并将结果写入本地 SQLite 数据库。

(目的是写一个数据适配器:在将结果导出到另一个数据库之前对 SQLite 数据库执行一些查询。也可以写入目标数据库中的临时表。)

我可以建立连接并获得查询结果 - 我可以打印它们,所以我知道那部分有效。但是如何根据源 SQL Server 的查询结果的结构创建新表?

这有效:

import sqlalchemy

esd = sqlalchemy.create_engine( 'mssql+pyodbc://username:passwordSservername/dbname' )
for row in esd.execute( 'select * from ticket_actions where log_dt > \'2012-09-01\''):
    print( row.eFolderID )

这也有效:

import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=servername;DATABASE=dbname;UID=username;PWD=password')
cursor = cnxn.cursor()
for row in cursor.execute( 'select * from ticket_actions where log_dt > \'2012-09-01\''):
    print( row.eFolderID )

关于如何创建与查询具有相同结构的新表的任何想法?

谢谢!

4

2 回答 2

4

请参阅创建和删除数据库表

创建…单个表可以通过create()…的方法来完成Table

要阅读源结构,请参阅反映数据库对象

可以Table指示对象从数据库中已经存在的相应数据库模式对象中加载有关其自身的信息。
[…]
反射系统也可以反射视图。

于 2012-09-19T13:35:39.027 回答
3

测试这个:

def copy_table(src_session, src_class, dst_session, dst_class):
    r=src_session.query(src_class).all()
    for i in r:
        j=dst_class()
        [setattr(j, col.name, getattr(i, col.name)) for col in i.__table__.columns]
        dst_session.add(j)

se1=db1.Session()
se2=db2.Session()
copy_table(se1, db1.Book, se2, db2.Book)
se2.commit()
于 2014-02-10T13:01:20.447 回答