在fork中使用sqlanydb启动数据库连接

时间:2014-04-02 12:43:33

标签: python sqlanywhere sybase-iq sqlanydb

基于分叉的例子,我建立了这个小脚本:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sqlanydb
import os

def child():
    conn = sqlanydb.connect(uid='dba', pwd='sql', eng='somedb_IQ', dbn='somedb')
    curs = conn.cursor()
    curs.execute("""SELECT * FROM foobaa;""")
    os.exit(0)

def parent():
   while True:
      newpid = os.fork()
      if newpid == 0:
         child()
      else:
         pids = (os.getpid(), newpid)
         print "parent: %d, child: %d" % pids
      if raw_input( ) == 'q': break

parent()

目的是在单独的进程内执行数据库操作(后面的大目标是同时运行大量查询)。

但是在运行脚本时,我得到了:

parent: 20580, child: 20587
Traceback (most recent call last):
  File "connectiontest.py", line 25, in <module>
    parent()
  File "connectiontest.py", line 19, in parent
    child()
  File "connectiontest.py", line 8, in child
    conn = sqlanydb.connect(uid='dba', pwd='sql', eng='somedb_IQ', dbn='somedb')
  File "/usr/local/lib/python2.6/dist-packages/sqlanydb.py", line 461, in connect
    return Connection(args, kwargs)
  File "/usr/local/lib/python2.6/dist-packages/sqlanydb.py", line 510, in __init__
    self.handleerror(*error)
  File "/usr/local/lib/python2.6/dist-packages/sqlanydb.py", line 520, in handleerror
    eh(self, None, errorclass, errorvalue)
  File "/usr/local/lib/python2.6/dist-packages/sqlanydb.py", line 342, in standardErrorHandler
    raise errorclass(errorvalue)
sqlanydb.OperationalError: Failed to initialize connection object

我可能错过了什么?

3 个答案:

答案 0 :(得分:1)

由于Sybase IQ基于Sybase ASA,您确定使用正确的凭据密钥吗?这个(尽管是旧的)文档看起来像是想要DSN和DSF而不是ENG和DBN。

http://dcx.sybase.com/1101/en/dbprogramming_en11/python-writing-open.html

答案 1 :(得分:0)

您需要破解sqlanydb来源以打印出看到的实际错误。无论问题是什么,都被通用的OperationalError掩盖了,因为它没有提供足够的信息来解决问题。行510是您需要添加几个print以找出(不)正在进行的内容的地方。

答案 2 :(得分:0)

将问题as.yearqtr(x, format = "Q%q/%y") ## [1] "2013 Q1" "2014 Q2" 移到child() - methode中似乎不会发生这个问题。所以它看起来像:

import sqlanydb