0

だから私はpymysql、純粋なpythonmysqlクライアント実装を使用しているアプリケーションを持っています。応答に入る前に、私は別のmysqlドライバーを使用することにオープンではないという事実を強調したいと思います。

MySQLに裏打ちされたデータ構造を実装するモジュールがあります。モジュールの要点は次のとおりです。

import pymysql
class Whatever:
    def __init__(self):
        # Debug statement
        print dir(pymysql)
        # use the cursors submodule
        self.conn = pymysql.connect( ... , cursorclass=pymysql.cursors.DictCursor)

これをテストファイルにインポートすると、すべて問題ありません。printステートメントの出力は次のとおりです。特に、カーソルモジュールに注意を向けます。

['BINARY', 'Binary', 'Connect', 'Connection', 'DATE', 'DATETIME', 'DBAPISet', 'DataError', 
'DatabaseError', 'Date', 'DateFromTicks', 'Error', 'FIELD_TYPE', 'IntegrityError', 
'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NUMBER', 'NotSupportedError', 
'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'TIME', 'TIMESTAMP', 'Time', 
'TimeFromTicks', 'Timestamp', 'TimestampFromTicks', 'VERSION', 'Warning', '__all__', 
'__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 
'__version__', 'apilevel', 'charset', 'connect', 'connections', 'constants', 'converters', 
'cursors', 'err', 'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info', 
'install_as_MySQLdb', 'paramstyle', 'sys', 'thread_safe', 'threadsafety', 'times', 'util', 
'version_info']

メインファイルからモジュールをインポートすると、次のようになりますAttributeError

Traceback (most recent call last):
  File "xxx.py", line 72, in <module>
    passwd='', db='test_db')
  File "yyy.py", line 26, in __init__
    passwd=passwd, db=db, cursorclass=pymysql.cursors.DictCursor)
AttributeError: 'module' object has no attribute 'cursors'

印刷の出力は次のdirとおりです。

['BINARY', 'Binary', 'Connect', 'Connection', 'DATE', 'DATETIME', 'DBAPISet', 
'DataError', 'DatabaseError', 'Date', 'DateFromTicks', 'Error', 'FIELD_TYPE', 
'IntegrityError', 'InterfaceError', 'InternalError', 'MySQLError', 'NULL', 'NUMBER', 
'NotSupportedError', 'OperationalError', 'ProgrammingError', 'ROWID', 'STRING', 'TIME', 
'TIMESTAMP', 'Time', 'TimeFromTicks', 'Timestamp', 'TimestampFromTicks', 'VERSION', 
'Warning', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 
'__path__', '__version__', 'apilevel', 'charset', 'connect', 'constants', 'converters', 
'err', 'escape_dict', 'escape_sequence', 'escape_string', 'get_client_info', 
'install_as_MySQLdb', 'paramstyle', 'sys', 'thread_safe', 'threadsafety', 'times', 
'version_info']

特に、cursors不在です。チェックpymysql.__file__はどちらの場合も同じで、出力は次のとおりです。

__init__.py     charset.py  connections.py  constants   converters.pyc  cursors.pyc err.pyc     times.py    util.py
__init__.pyc    charset.pyc connections.pyc converters.py   cursors.py  err.py      tests       times.pyc   util.pyc

明らかcursors.pyにそこにあります。では、何が得られるのでしょうか?

4

1 に答える 1

2

import pymysql.cursorsファイルの先頭に明示を追加する必要があります。

cursorsサブパッケージはpymysql'sにリストされていないため__all__、を実行しただけではインポートされませんimport pymysql

于 2012-12-26T17:40:50.820 に答える