python - How to execute an .sql file in pymssql -
i'm trying execute sql file in python using pymssql, file contains begin transaction, commit transaction , end, , safety nets before , after.
i'm trying open file in memory , execute content:
file = open(options.sqlfile, 'r') sqlfilecontents = file.read() file.close() cursor.execute(sqlfilecontents) conn.commit()
but it's returning me errors:
pymssql.programmingerror: (102, "incorrect syntax near 'go'.db-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 1 5:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102,severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\ndb-lib error message 102, severity 15:\ngeneral sql server error: check messages sql server\n")
so have 2 questions:
- is possible execute query way i'm doing it?
- is sql query file problem?
thanks help.
edit: here sql:
here sql:
set numeric_roundabort off go set ansi_padding, ansi_warnings, concat_null_yields_null, arithabort, quoted_identifier, ansi_nulls on go if exists (select * tempdb..sysobjects id=object_id('tempdb..#tmperrors')) drop table #tmperrors go create table #tmperrors (error int) go set xact_abort on go set transaction isolation level serializable go begin transaction print n'adding release version [admin].[releasehistory]' go insert [admin].[releasehistory] values (getutcdate(), '1.7') go if @@error<>0 , @@trancount>0 rollback transaction go if @@trancount=0 begin insert #tmperrors (error) select 1 begin transaction end go if exists (select * #tmperrors) rollback transaction go if @@trancount>0 begin print 'the database update succeeded' commit transaction end else print 'the database update failed' go drop table #tmperrors go
yes possible that. so, cleaner hardcoding sql in code.
can add sql post? there's messed character somewhere.
i (with pyodbc):
with open('%smysql.sql' % sql_dir) f: sql = f.read() % params # don't untrusted inputs cursor.execute(sql) cursor.commit() cursor.close()
edit: remove go
it's not real sql statement. check answer: using "go" within transaction.
then should fine.
Comments
Post a Comment