Error on ETL code on python
I managed to learn some lines of code on python to perform ETL processes in MS SQL environment. the initial script was for PostgreSQL environment. I want to use mine for MS SQL. I tried editing the code however I got an error. Please kindly have a look
import petl as etl, pyodbc as py, sys
from sqlalchemy import *
reload(sys)
sys.setdefaultencoding('utf8')
dbCnxns = {'sample' :"dbname=sample user=user host=127.0.0.1"
, 'python': "dbname=python user=user host=127.0.0.1" }
#set my connection
sourceConn = py.connect(dbCnxns['sample'])
targetConn = py.connect(dbCnxns['python'])
sourceCursor = sourceConn.cursor()
targetCursor = targetConn.cursor()
sourceCursor.execute = ('SELECT name from sys.tables')
sourceTables = sourceCursor.fetchall()
for t in sourceTables:
targetCursor.execute("drop table if exist %s" % (t[0]))
sourceDs = etl.fromdb(sourceConn, "select * from %s" % (t[0]))
etl.todb(sourceDs,targetConn,t[0], create=True, sample=1000)
Thank you
After some edits. I was able to write a code for MSSQL D. Here is the codes before
import petl as etl, pyodbc as py
#from sqlalchemy import *
#reload(sys)
#sys.setdefaultencoding('utf8')
#dbCnxns = {'sample' : "Driver={SQL Server} Server=USER-PC Database=sample Trusted_Connection=yes"
# , 'python': "Driver={SQL Server} Server=USER-PC Database=python Trusted_Connection=yes" }
#set my connection
#sourceConn = pg.connect(dbCnxns['sample'])
#targetConn = pg.connect(dbCnxns['python'])
#sourceCursor = sourceConn.cursor()
#targetCursor = targetConn.cursor()
#sourceCursor.execute = (***SELECT * FROM sample.dbo.Customer***)
sourceConn = py.connect('Driver={SQL Server};'
'Server=USER-PC;'
'Database=sample;'
'Trusted_Connection=yes;')
targetConn = py.connect('Driver={SQL Server};'
'Server=USER-PC;'
'Database=python;'
'Trusted_Connection=yes;')
sourceCursor = sourceConn.cursor()
targetCursor = targetConn.cursor()
sourceCursor.execute('SELECT name from sys.tables')
sourceTables = sourceCursor.fetchall()
for t in sourceTables:
targetCursor.execute("drop table if exist %s" % (t[0]))
sourceDs = etl.fromdb(sourceConn, "select * from %s" % (t[0]))
etl.todb(sourceDs,targetConn,t[0], create=True, sample=1000)
Right now, I looks good however I am getting a programming error
ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'if'. (156) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]An expression of non-boolean type specified in a context where a condition is expected, near 'Customer'. (4145)
Visit https://www.dofactory.com/sql/sample-database
To see the database structures I am working on.
Thank you again
Support for DROP TABLE IF EXISTS ...
was introduced in Microsoft SQL Server 2016. You are apparently using an earlier version of SQL Server, so you will have to use a workaround. See this question for details.