おそらく簡単に解決できる奇妙な問題があります。
__init__
およびメソッドを含むクラスデータベースがありexecuteDictMore
ます(とりわけ)。
class Database():
def __init__(self, database, server,login, password ):
self.database = database
my_conv = { FIELD_TYPE.LONG: int }
self.conn = MySQLdb.Connection(user=login, passwd=password, db=self.database, host=server, conv=my_conv)
self.cursor = self.conn.cursor()
def executeDictMore(self, query):
self.cursor.execute(query)
data = self.cursor.fetchall()
if data == None :
return None
result = []
for d in data:
desc = self.cursor.description
dict = {}
for (name, value) in zip(desc, d) :
dict[name[0]] = value
result.append(dict)
return result
次に、このクラスをファイル db_functions.py でインスタンス化します。
from Database import Database
db = Database()
そして、db_functions の関数から executeDictMore メソッドを呼び出します。
def test(id):
query = "SELECT * FROM table WHERE table_id=%s;" %(id)
return db.executeDictMore(query)
奇妙な部分が来ます。db_functions をインポートして db_functions.test(id) を Python コンソールから呼び出すと、次のようになります。
import db_functions
t = db_functions.test(12)
それはうまく動作します。しかし、別の python ファイルから同じことを行うと、次のエラーが発生します。
AttributeError: Database instance has no attribute 'executeDictMore'
ここで何が起こっているのか本当にわかりません。別のデータベース クラスが干渉しているとは思いません。そして、モジュールが sys.path にあるフォルダーを追加するので、とにかく正しいモジュールを呼び出す必要があります。
誰かがアイデアを持っているなら、それは大歓迎です。