2017-08-15 84 views
0

我正在试验pygrametl,试图从数据库(源)中的一个表中获取数据到目标数据库中的另一个表中。pygrametl KeyError从一个表加载数据到另一个表

源表具有以下模式:

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; 

在蟒我有以下代码:

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

的我得到的错误如下:

Traceback (most recent call last): File ".\testex.py", line 35, in sourceDimension.insert(row) File "Python\Python36-32\lib\site-packages\pygrametl\tables.py", line 357, in insert self.targetconnection.execute(self.insertsql, row, namemapping) File "Python\Python36-32\lib\site-packages\pygrametl__init__.py", line 663, in execute self.__cursor.execute(stmt, arguments) File "Python\Python36-32\lib\site-packages\pymysql\cursors.py", line 164, in execute query = self.mogrify(query, args) File "Python\Python36-32\lib\site-packages\pymysql\cursors.py", line 143, in mogrify query = query % self._escape_args(args, conn) KeyError: 'dname'

回答

1

您的属性应该位于查询得到的数据中。您使用:

name_mapping = 'dname', 'ddescr' 
attributes=['dname', 'ddescr']) 

或:

name_mapping = 'fname', 'descr' 
attributes=['fname', 'descr']) 
相关问题