среда, 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)
...
 
 

Исключения базы данных SQLite

Исключения базы данных SQLite

На практике всегда окружайте операции с базой данных выражениями или a context manager:
В этом примере мы используем выражения try/except/finally для того, что бы поймать любые исключения в коде. Ключевое слово finally очень важно потому, что всегда закрывает коннект к базе корректно. О исключениях хорошо описано в PEP249. Итак посмотрим на этот код:
Это называется ловим все. Используем его здесь для примера, в реальном приложении вы должны поймать и обработать определенные исключения такие как IntegrityError или DatabaseError.
Мы можем использовать Connection объект как context manager для автоматического запоминания или отката транзакции:
В вышеприведенном примере если предложение insert вызывает исключение, транзакция будет откачена и выдано сообщение; в противном случае транзакция будет запомнена в базе. Пожалуйста обратите внимание на то, что мы вызываем метод execute объекта db а не объекта курсор.

понедельник, 9 декабря 2013 г.

Как завершить программу на Python

Завершение программы:

от пользователя grom http://webonrails.ru/post/401/

"""
Есть несколько способов.
Первый способ:
import sys
sys.exit([n])
Второй способ:
railse SystemExit([n])
Третий способ:
В отличие от предыдущих завершает работу немедленно, без выполнения необходимых завершающих операций
import os
os._exit([n])
Так теперь про параметр N - это код завершения программы. По умолчанию 0 - т.е. нормальное завершение программы. Если передан не нулевой код, то это признак завершения с ошибкой.
"""

Я попробовал первый способ - РАБОТАЕТ - спасибо!

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

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

Архив блога