python - Python 中的 sql (MonetDB) 命令停止

标签 python sql monetdb

我用 Python SQL 编写了对 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))

例如第一个调用是:

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

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

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

最佳答案

一定 promise !默认情况下,自动提交参数设置为 False。您可以执行以下任一操作:

server.connect(主机名=“localhost”,端口=50000,用户名=“monetdb”,密码=“monetdb”,数据库=“dbfarm”,语言=“sql”,autocommit=True)

或者简单地运行: 连接.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()

关于python - Python 中的 sql (MonetDB) 命令停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23889229/

相关文章:

python - 使用检查点时 sqlite3 未知数据库模式?

c++ - 如何使用 SWIG 为 C++ 类提供 Python __repr__()

mysql - 表列作为变量

python - 如何在 python 中从头开始设置(新的)monetdb 数据库?

python - 减少列值之间的数据框

python - 在 Pandas 数据框中合并具有相同浮点索引的行

sql - 如何找到购买产品 A 和 D 的客户间隔 > 6 个月?

sql - 删除sql中所有重复的行

linux - MonetDB 并行查询高 IO 写入事件

monetdb - 如何重命名 MonetDB 中的表?