В моем приложении Python я использовал sqlite3.Row в качестве фабрики строк, чтобы индексировать результаты по имени некоторое время без проблем.Недавно я переместил свое приложение на новый сервер (без изменений кода) и обнаружил, что этот метод индексации теперь неожиданно завершается сбоем на новом сервере, учитывая довольно специфические условия.Я не вижу никакого объяснения этому.
Проблема возникает на новом сервере, когда в моем запросе выбора есть ключевое слово DISTINCT
:
import sqlite3
conn = sqlite3.connect(':memory:')
conn.row_factory = sqlite3.Row
c = conn.cursor()
c.execute('create table test ([name] text)')
c.execute("insert into test values ('testing')")
conn.commit()
c.execute('select [name] from test')
row = c.fetchone()
print row['name'] # works fine on both machines
c.execute('select distinct [name] from test') # add distinct keyword
row = c.fetchone()
print row['name'] # fails on new server (no item with that key)
Как видите, яЯ могу решить эту проблему, используя базу данных в памяти, поэтому проблема не имеет ничего общего с моими существующими данными.Обе машины основаны на Debian (старая: Ubuntu 8.10, новая: Debian 5.0.3), и обе машины работают на Python 2.5.2.Я полагаю, что модуль sqlite3 является основной частью установки Python, поэтому я не знаю, как может происходить этот тонкий разрыв, поскольку версии Python идентичны.раньше?
Спасибо,
Крис