среда, 25 декабря 2013 г.

SQLite Row Factory и Data Types

SQLite Row Factory и Data Types

Следующая таблица показывает связь между типами данных SQLite и типов данных Python:
  • None тип конвертируется в NULL
  • int  тип конвертируется в INTEGER
  • float  тип конвертируется в REAL
  • str  тип конвертируется в TEXT
  • bytes  тип конвертируется в BLOB
Класс row_factory sqlite3.Row используется для доступа к колонкам запроса по именам, а не по порядковому номеру:

db = sqlite3.connect('data/mydb')
db.row_factory = sqlite3.Row
cursor = db.cursor()
cursor.execute('''SELECT name, email, phone FROM users''')
for row in cursor:
    # row['name'] returns the name column in the query, row['email'] returns email column.
    print('{0} : {1}, {2}'.format(row['name'], row['email'], row['phone']))
db.close()
В cx_Oracle есть такой способ использовать row_factory. Пишется класс с начальным методом. Как входные параметры ему передаются поля из запроса. Присваивая их переменным класса с теми же именами, можно потом ссылаться к ним по этим именам:

import cx_Oracle
...
class Test(object):
    def __init__(self, codeface, dismiss, nameface, datebir, login, datecas):
        self.codeface = codeface
        self.dismiss = dismiss
        self.nameface = nameface
        if datebir is None:
            self.datebir = ''
        else:
            self.datebir = dtconv(datebir)
        self.login = login
        if datecas is None:
            self.datecas = ''
        else:
            self.datecas = dtconv(datecas)

... 
sql_users = """select a.codeface, a.dismiss, a.nameface, a.datebir, a.login_name_user, e.datecas
    from kadry.face a, kadry.execution e
    where a.codeface = e.codeface"""

cursor.execute(sql_users)
cursor.rowfactory = Test

...
for row in cursor:

    print(row.codeface, row.nameface)
...
 
 

Комментариев нет:

Отправить комментарий

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога