Python 将数据从一个表加载到另一个表时出现pygrametl键错误
我正在试验pygrametl,试图将数据从数据库(源)中的一个表中获取到目标数据库中的另一个表中 源表具有以下架构:Python 将数据从一个表加载到另一个表时出现pygrametl键错误,python,etl,data-warehouse,python-3.6,pygrametl,Python,Etl,Data Warehouse,Python 3.6,Pygrametl,我正在试验pygrametl,试图将数据从数据库(源)中的一个表中获取到目标数据库中的另一个表中 源表具有以下架构: CREATE TABLE `sdata` ( `id` int(11) NOT NULL AUTO_INCREMENT, `fname` varchar(255) DEFAULT NULL, `descr` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4
CREATE TABLE `sdata` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fname` varchar(255) DEFAULT NULL,
`descr` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT=' ';
目标表使用以下架构:
CREATE TABLE `dtable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dname` varchar(255) DEFAULT NULL,
`ddescr` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在python中,我有以下代码:
import pygrametl
from pygrametl.datasources import SQLSource, CSVSource
from pygrametl.tables import Dimension, FactTable, SlowlyChangingDimension
import pymysql
sourceDatabase = pymysql.connect(host='localhost', user='root', password='pass', database='source')
destDatabase = pymysql.connect(host='localhost', user='root', password='pass', database='dest')
dw_conn_wrapper = pygrametl.ConnectionWrapper(connection=destDatabase)
sql = "SELECT fname, descr from sdata"
name_mapping = 'fname', 'descr'
source = SQLSource(connection=sourceDatabase, query=sql, names=name_mapping)
destDimension = Dimension(
name='dtable',
key='id',
attributes=['dname', 'ddescr'])
for row in source:
print(row)
destDimension.insert(row)
dw_conn_wrapper.commit()
dw_conn_wrapper.close()
sourceDatabase.close()
我得到的错误如下:
回溯(最近一次调用last):文件“\testex.py”,第35行,在
sourceDimension.insert(行)文件“Python\Python36-32\lib\site packages\pygrametl\tables.py”,第357行,
插入
self.targetconnection.execute(self.insertsql,row,namemapping)文件“Python\Python36-32\lib\site packages\pygrametl\uuuuu init\uuuuu.py”,
执行中的第663行
self.\uu cursor.execute(stmt,arguments)文件“Python\Python36-32\lib\site packages\pymysql\cursors.py”,第164行,
执行中
query=self.mogrify(query,args)文件“Python\Python36-32\lib\site packages\pymysql\cursors.py”,第143行,
莫格里菲
query=query%self.\u escape\u args(args,conn)键错误:“dname”
属性应该位于查询产生的数据中。您可以使用:
name_mapping = 'dname', 'ddescr'
attributes=['dname', 'ddescr'])
或:
name_mapping = 'fname', 'descr'
attributes=['fname', 'descr'])