J'expérimente avec pygrametl, en essayant d'obtenir des données d'une table dans une base de données (source) dans une autre table dans une base de données de destination.pygrametl KeyError lors du chargement de données d'une table vers une autre
La table source a le schéma suivant:
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=' ';
Le tableau de destination utilise le schéma suivant:
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;
En python je le code suivant:
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()
Le erreur que je reçois est la suivante:
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'