来自Python暂停的sql(MonetDB)命令

2024-06-12 01:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我用pythonsql编写了对MonetDB服务器的调用脚本(当然,我验证了它正在运行)。当我打印调用而不是调用它们时,命令看起来不错,但是如果我运行原始脚本,它不会崩溃,它确实使用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))

例如,第一个电话是:

^{pr2}$

但即使这样也不会发生。表中没有year列。在

或者,我可以在控制台中运行脚本,输出比自己打印的多吗?在


Tags: inimportre脚本cmdforservertable
1条回答
网友
1楼 · 发布于 2024-06-12 01:30:02

执行提交!默认情况下,autocommit参数设置为False。您可以选择:

在服务器连接(hostname=“localhost”,端口=50000,username=“monetdb”,password=“monetdb”,database=“dbfarm”,language=“sql”,autocommit=True

或者干脆跑: 连接.提交()

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()

和13;
和13;

相关问题 更多 >