Python 将数据从一个表加载到另一个表时出现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

我正在试验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 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'])