複数の挿入ステートメント(1000 +)を含む.sqlファイルがあり、このファイルのステートメントをOracleデータベースに実行したいと思います。
今のところ、私はodbcでpythonを使用して、次のようにデータベースに接続しています。
import pyodbc
from ConfigParser import SafeConfigParser
def db_call(self, cfgFile, sql):
parser = SafeConfigParser()
parser.read(cfgFile)
dsn = parser.get('odbc', 'dsn')
uid = parser.get('odbc', 'user')
pwd = parser.get('odbc', 'pass')
try:
con = pyodbc.connect('DSN=' + dsn + ';PWD=' + pwd + ';UID=' + pwd)
cur = con.cursor()
cur.execute(sql)
con.commit()
except pyodbc.DatabaseError, e:
print 'Error %s' % e
sys.exit(1)
finally:
if con and cur:
cur.close()
con.close()
with open('theFile.sql','r') as f:
cfgFile = 'c:\\dbinfo\\connectionInfo.cfg'
#here goes the code to insert the contents into the database using db_call_many
statements = f.read()
db_call(cfgFile,statements)
しかし、それを実行すると、次のエラーが発生します。
pyodbc.Error: ('HY000', '[HY000] [Oracle][ODBC][Ora]ORA-00911: invalid character\n (911) (SQLExecDirectW)')
ただし、ファイルの内容はすべて次のとおりです。
INSERT INTO table (movie,genre) VALUES ('moviename','horror');
編集
print '<{}>'.format(statements)
db_db_call(cfgFile、statements)の前に追加すると、結果(100+)が得られます。
<INSERT INTO table (movie,genre) VALUES ('moviename','horror');INSERT INTO table (movie,genre) VALUES ('moviename_b','horror');INSERT INTO table (movie,genre) VALUES ('moviename_c','horror');>
これを読んでくれてありがとう。