【问题标题】:SqlAlchemy: export table to new databaseSqlAlchemy:将表导出到新数据库
【发布时间】:2012-09-11 18:08:44
【问题描述】:

最近才开始使用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 )

关于如何创建一个与查询结构相同的新表有什么想法吗?

谢谢!

【问题讨论】:

    标签: python sql-server sqlite sqlalchemy


    【解决方案1】:

    Creating and Dropping Database Tables:

    可以通过create() ... Table 的方法创建...单个表。

    阅读源码结构见Reflecting Database Objects:

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

    【讨论】:

    • 我知道表格的创建,但是反射 - 这就是我正在寻找的东西,谢谢!
    • 那个链接已经失效了;我猜这是新的:docs.sqlalchemy.org/en/latest/core/reflection.html,引用,“在最简单的情况下,您只需要指定表名、MetaData 对象和 autoload=True 标志。”
    【解决方案2】:

    测试一下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2014-02-14
      • 1970-01-01
      • 2017-09-13
      • 2012-12-22
      • 1970-01-01
      相关资源
      最近更新 更多