最近才开始使用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 )
关于如何使用与查询相同的结构创建新表的任何想法都有?
谢谢!
答案 0 :(得分:2)
请参阅Creating and Dropping Database Tables:
创建...个别表格可以通过
create()
的{{1}} ...方法完成。
要阅读源结构,请参阅Reflecting Database Objects:
可以指示
Table
对象从数据库中已存在的相应数据库模式对象加载有关自身的信息。
[...]
反射系统也可以反映视图。
答案 1 :(得分:1)
测试一下:
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()