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:

  1. is possible execute query way i'm doing it?
  2. 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

Popular posts from this blog

Java 3D LWJGL collision -

spring - SubProtocolWebSocketHandler - No handlers -

methods - python can't use function in submodule -