Я использую Python 2.6.4 и его модуль sqlite3 для небольшого проекта базы данных, и у меня возникает следующая проблема: я пытаюсь использовать пользовательскую функцию, то есть функцию, которую вы определяете в Python для использовать после внутри ваших запросов. Функция является оберткой для другой функции, которую я имею в другом модуле. Проблема в том, что при выполнении запроса я всегда получаю исключение AttributeError с сообщением: 'builtin_function_or_method' объект не имеет атрибута 'execute' , и я понятия не имею, почему. Код следующий. Не могли бы вы указать мне, что я делаю не так?
Заранее спасибо.
Упаковщик Функция:
def SQLAreSimilar(userSelectedName, artistName):
'''
Wrapper to the areSimilar function of strUtils to use it directly inside the
queries. Not to be called directly.
'''
if strUtils.areSimilar(userSelectedName, artistName):
return 1
else:
return 0
Функция , которая фактически выполняет запрос. Обратите внимание на использование метода create_function объекта Connection.
def getArtistsBySimilarName(name):
'''
Returns all artists with a similar name, according to the Levenshtein
distance. The DB is supposed to be initialised. Returns a dictionary of
dictionaries with the data of all similar artists indexed by its CODARTIST,
the PK. The dictionary is empty if no row is returned. None is returned on
error.
'''
try:
con = sqlite3.connect(genericConf.SQL_DBNAME)
con.row_factory = sqlite3.Row
con.create_function("ARESIMILAR", 2, SQLAreSimilar)
cur = con.cursor
rows = cur.execute(specificConf.SQL_SELECT_ARTIST_SIMILARNAME, name)
retDict = {}
for row in rows:
d = {}
d['NUMCD'] = row['NUMCD']
d['NAME'] = row['NAME']
retDict[row['CODARTIST']] = d
return retDict
except:
return None
И, наконец, запрос . Он находится внутри модуля под названием «specificConf». Так что он правильно используется в функции выше, проблема не в этом.
SQL_SELECT_ARTIST_SIMILARNAME = u'''
SELECT CODARTIST, NAME, NUMCD, ARESIMILAR(?, NAME) AS SIMILAR
FROM ARTIST
WHERE SIMILAR = 1
'''