Унарный оператор +
может использоваться для преобразования значения в число в JavaScript. Подчеркивание, по-видимому, проверяет, что свойство .length
является числом, иначе оно не будет равно самому преобразованному в номер.
Я не уверен - ли это лучший подход, но здесь - то, что я обычно делаю для получения официального набора документов с помощью DB-API 2 совместимых модуля:
cursor.execute("""SELECT foo, bar, baz, quux FROM table WHERE id = %s;""",
(interesting_record_id,))
for foo, bar, baz, quux in cursor.fetchall():
frobnicate(foo + bar, baz * quux)
метод форматирования запроса является одним из стандартов DB-API, но, оказывается, предпочтительный метод для Psycopg2; другие адаптеры DB-API могли бы предложить другую конвенцию, которая будет прекрасна.
Запись запрашивает как это, где неявный кортеж, распаковывающий, используется для работы с набором результатов, обычно было более эффективным для меня, чем попытка волноваться о соответствии именам переменной Python к именам столбцов SQL (который я обычно только использую для отбрасывания префиксов, и затем только если я работаю с подмножеством имен столбцов, таким образом, что префиксы не помогают разъяснить вещи больше), и очень лучше, чем запоминание идентификаторов числового столбца.
Этот стиль также помогает Вам избежать SELECT * FROM table...
, который является просто аварией обслуживания для чего-либо кроме самых простых таблиц и запросов.
Так, не точно ответ Вы просили, но возможно просвещали, тем не менее.
К столбцам доступа по имени, используйте row_factory
атрибут экземпляра Соединения. Это позволяет Вам установить функцию, которая берет аргументы cursor
и row
, и возвратите то, что Вы хотели бы. Существуют некоторые встроенные к pysqlite, а именно, sqlite3.Row
, который делает то, что Вы спросили.
API SQLite поддерживает cursor.description, таким образом, Вы можете легко сделать это как это
headers = {}
for record in cursor.fetchall():
if not headers:
headers = dict((desc[0], idx) for idx,desc in cursor.description))
data.append(record[headers['column_name']])
Немного длинный обветренный, но сделали задание. Я заметил, что у них даже есть он в factory.py файле под dict_factory.