У меня есть странная проблема, которую, вероятно, легко решить.
У меня есть база данных класса с методами __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()
И я вызываю метод executeDictMore из функции db_functions:
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, поэтому он все равно должен вызывать правильный модуль.
Если у кого-то есть идея, это очень приветствуется.
db
? Могу ли я предположить, что вы импортируетеDatabase.py
несколько раз? В этом случае может возникнуть проблема, когда db уже определена в глобальной области видимости, что может вызвать некоторые сомнительные проблемы. (просто мозговой штурм) - person Torxed   schedule 13.08.2013