1

MonetDB サーバーへの Python SQL 呼び出しのスクリプトを作成しました (もちろん、実行中であることを確認しています)。呼び出しを呼び出す代わりに印刷すると、コマンドは問題ないように見えますが、元のスクリプトを実行すると、クラッシュせず、CPU とメモリを使用しますが、データベースでは何も変更されず、最初の行でさえ変更されません実行されました。なんで?

Python スクリプトは次のようになります。

# script to merge tables in MonetDB
import re

from monetdb import mapi
server = mapi.Server()
server.connect(hostname="localhost", port=50000, username="monetdb", password="monetdb", database="dbfarm", language="sql")

def tablemerge(stub,yearlist):
    for year in yearlist:
#        server.cmd('ALTER TABLE %s_%d ADD COLUMN "year" INTEGER DEFAULT %d;' % (stub,year,year))
        print 'ALTER TABLE %s_%d ADD COLUMN "year" INTEGER DEFAULT %d;' % (stub,year,year)
        newstub = re.sub(r'sys.ds_chocker_lev_', r'', stub)
        if year == yearlist[0]:
            unioncall = 'CREATE TABLE %s AS SELECT * FROM %s_%d ' % (newstub,stub,year)
        else:
            unioncall += 'UNION ALL SELECT * FROM %s_%d ' % (stub,year)
    unioncall += ';'
    server.cmd(unioncall)
#    print unioncall
    for year in yearlist:
        server.cmd('DROP TABLE %s_%d;' % (stub,year))
#        print 'DROP TABLE %s_%d;' % (stub,year)
    print '%s done.' % stub
for stub in ['civandr']:
    tablemerge('sys.ds_chocker_lev_%s' % stub,xrange(1998,2013))

たとえば、最初の呼び出しは次のようになります。

ALTER TABLE sys.ds_chocker_lev_civandr_1998 ADD COLUMN "year" INTEGER DEFAULT 1998;

しかし、これでさえ起こりません。year表に列はありません。

または、自分で印刷したものよりも多くの出力でコンソールでスクリプトを実行できますか?

4

1 に答える 1

1

コミットしてください!デフォルトでは、autocommit パラメータは False に設定されています。次のいずれかを実行できます。

server.connect(hostname="localhost", port=50000, username="monetdb", password="monetdb", database="dbfarm", language="sql", autocommit=True )

または単に実行: connection.commit()

connection = monetdb.sql.connect(username=username,password=password,hostname=hostname,port=port,database=database)                    
cursor = connection.cursor()                                                                     
cursor.execute('create table test (id int, name varchar(50));')
connection.commit()

于 2014-10-20T15:53:58.583 に答える