2

フォークの例に基づいて、次の小さなスクリプトを作成します。

#!/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

私は何を見逃したのでしょうか?

4

3 に答える 3

1

import sqlanydb問題は、 child() メソッドに移動することによって発生しないようです。したがって、次のようになります。

def child():
    import sqlanydb

    conn = sqlanydb.connect(uid='dba', pwd='sql', dsn='some_db')
    curs = conn.cursor()
    curs.execute("""SELECT * FROM SA100_1_1;""")
    curs.close()
    conn.close()
于 2015-06-26T11:17:03.743 に答える
1

Sybase IQ は Sybase ASA に基づいているため、資格情報に適切なキーを使用していますか? この (古い) ドキュメントでは、ENG と DBN の代わりに DSN と DSF が必要なようです。

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

于 2014-04-03T01:13:51.187 に答える
0

sqlanydb実際に表示されているエラーを出力するには、ソースをハックする必要があります。OperationalError問題が何であれ、問題を解決するのに十分な情報を提供していないジェネリックによってマスクされています。行は、何が起こっているか (何が起こっていないか) を把握するために s を510いくつか追加する必要がある場所です。print

于 2014-05-27T16:15:02.043 に答える