Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Сохранение в таблице даты и времени

Поиск

Листинг 18.17. Сохранение в таблице даты и времени

# -*- coding: utf-8 -*-

import sqlite3, datetime, time

 

# Преобразование даты в число

def my_adapter(t):

return time.mktime(t.timetuple())

 

# Преобразование числа в дату

def my_converter(t):

return datetime.datetime.fromtimestamp(float(t))

 

# Регистрируем обработчики

sqlite3.register_adapter(datetime.datetime, my_adapter)

sqlite3.register_converter("mytime", my_converter)

# Получаем текущую дату и время

dt = datetime.datetime.today()

con = sqlite3.connect(":memory:", isolation_level=None,

detect_types=sqlite3.PARSE_COLNAMES)

cur = con.cursor()

cur.execute("CREATE TABLE times (time)")

cur.execute("INSERT INTO times VALUES (?)", (dt,))

cur.execute("""SELECT time as "t [mytime]" FROM times""")

print(cur.fetchone()[0]) # 2015-04-15 15:41:47

con.close()

input()

 

Листинг 18.18. Встроенные функции для преобразования типов

# -*- coding: utf-8 -*-

import sqlite3, datetime

# Получаем текущую дату и время

d = datetime.date.today()

dt = datetime.datetime.today()

con = sqlite3.connect(":memory:", isolation_level=None,

detect_types=sqlite3.PARSE_DECLTYPES)

cur = con.cursor()

cur.execute("CREATE TABLE times (d date, dt timestamp)")

cur.execute("INSERT INTO times VALUES (?,?)", (d, dt))

cur.execute("SELECT d, dt FROM times")

res = cur.fetchone()

print(res[0]) # 2015-04-15

print(res[1]) # 2015-04-15 15:41:47.190000

con.close()

input()

Обработка исключений

Листинг 18.19. Выполнение SQL-команд, введенных в консоли

# -*- coding: utf-8 -*-

import sqlite3, sys, re

 

def db_connect(db_name):

try:

db = sqlite3.connect(db_name, isolation_level=None)

except (sqlite3.Error, sqlite3.Warning) as err:

print("Не удалось подключиться к БД")

input()

sys.exit(0)

return db

 

print("Введите название базы данных:", end=" ")

db_name = input()

con = db_connect(db_name) # Подключаемся к базе

cur = con.cursor()

sql = ""

print("Чтобы закончить выполнение программы, введите <Q>+<Enter>")

while True:

tmp = input()

if tmp in ["q", "Q"]:

break

if tmp.strip() == "":

continue

sql = "{0} {1}".format(sql, tmp)

if sqlite3.complete_statement(sql):

try:

sql = sql.strip()

cur.execute(sql)

if re.match("SELECT ", sql, re.I):

print(cur.fetchall())

except (sqlite3.Error, sqlite3.Warning) as err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

sql = ""

cur.close()

con.close()

 

 

>>> sql = "SELECT 10 > 5;"

>>> sqlite3.complete_statement(sql)

True

>>> sql = "SELECT 10 > 5"

>>> sqlite3.complete_statement(sql)

False

>>> sql = "SELECT 10 > 5; SELECT 20 + 2;"

>>> sqlite3.complete_statement(sql)

True

 

Листинг 18.20. Инструкция with...as

# -*- coding: utf-8 -*-

import sqlite3

con = sqlite3.connect(r"C:\book\catalog.db")

try:

with con:

# Добавление новой рубрики

con.execute("""INSERT INTO rubr VALUES (NULL, 'Мода')""")

except sqlite3.DatabaseError as err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

try:

with con:

# Добавление новой рубрики

con.execute("""INSERT INTO rubr VALUES (NULL, 'Спорт')""")

# Рубрика с идентификатором 1 уже существует!

con.execute("""INSERT INTO rubr VALUES (1, 'Казино')""")

except sqlite3.DatabaseError as err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

con.close()

input()

Трассировка выполняемых запросов

Листинг 18.21. Вывод выполняемых SQL-команд на экран

import sqlite3

 

# Объявляем функцию, которая станет выводить команды на экран

def tracer(command):

print(command)

 

con = sqlite3.connect(r"C:\book\catalog.db")

con.set_trace_callback(tracer) # Регистрируем функцию tracer()

con.execute("SELECT * FROM user;")

con.execute("SELECT * FROM rubr;")

con.close()

 

 

con.set_trace_callback(None)

Доступ к базе данных MySQL

19.1. Библиотека MySQLClient

cd <Полный путь к папке, где хранится загруженный WHL-файл>

c:\python34\scripts\pip install <Имя WHL-файла с дистрибутивом>

 

 

>>> import MySQLdb

>>> MySQLdb.__version__

'1.3.6'

 

 

>>> MySQLdb.apilevel

'2.0'

Подключение к базе данных

Листинг 19.1. Получение настроек кодировки

>>> import MySQLdb # Подключаем модуль MySQLdb

>>> con = MySQLdb.connect(host="localhost", user="root",

passwd="123456")

>>> con.get_character_set_info()

{'mbmaxlen': 1, 'collation': 'latin1_swedish_ci', 'mbminlen': 1,

'name': 'latin1', 'comment': ''}

>>> con.close()

 

Листинг 19.2. Указание кодировки соединения при подключении к базе

>>> import MySQLdb

>>> # Задаем кодировку 1251

>>> con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="cp1251")

>>> con.get_character_set_info()

{'mbmaxlen': 1, 'collation': 'cp1251_general_ci', 'mbminlen': 1,

'name': 'cp1251', 'comment': ''}

>>> con.close()

 

>>> # Задаем кодировку UTF-8

>>> con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="utf8")

>>> con.get_character_set_info()

{'mbmaxlen': 3, 'collation': 'utf8_general_ci', 'mbminlen': 1, 'name': 'utf8',

'comment': ''}

>>> con.close()

 

Листинг 19.3. Указание кодировки соединения методом set_character_set()

>>> import MySQLdb

>>> con = MySQLdb.connect(host="localhost", user="root",

passwd="123456")

>>> con.set_character_set("utf8")

>>> con.get_character_set_info()

{'mbmaxlen': 3, 'collation': 'utf8_general_ci', 'mbminlen': 1, 'name': 'utf8',

'comment': ''}

>>> con.close()

 

 

>>> con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="cp1251")

Traceback (most recent call last):

... Фрагмент опущен...

OperationalError: (2019, "Can't initialize character set cp1251

(path: C:\\mysql\\\\share\\charsets\\)")

 

 

character-sets-dir="C:\\Program Files\\MySQL\\MySQL Server

5.5\\share\\charsets\\"

 

Листинг 19.4. Указание пути к конфигурационному файлу

>>> import MySQLdb # Подключаем модуль MySQLdb

>>> ini = r"C:\Program Files\MySQL\MySQL Server 5.5\my.ini"

>>> con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", read_default_file=ini, charset="cp1251")

>>> con.get_character_set_info()

{'mbmaxlen': 1, 'collation': 'cp1251_general_ci', 'mbminlen': 1,

'name': 'cp1251', 'comment': '', 'dir':

'C:\\Program Files\\MySQL\\MySQL Server 5.5\\share\\charsets\\'}

>>> con.close()

Выполнение запросов

import MySQLdb

con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="utf8")

cur = con.cursor() # Создаем объект-курсор

sql = """CREATE DATABASE `python`

DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci"""

try: # Обрабатываем исключения

cur.execute(sql) # Выполняем SQL-запрос

except MySQLdb.DatabaseError, err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

cur.close() # Закрываем объект-курсор

con.close() # Закрываем соединение

input()

 

 

import MySQLdb

con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="utf8", db="python")

cur = con.cursor()

sql_1 = """\

CREATE TABLE `city` (

`id_city` INT NOT NULL AUTO_INCREMENT,

`name_city` CHAR(255) NOT NULL,

PRIMARY KEY (`id_city`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8"""

sql_2 = "INSERT INTO `city` VALUES (NULL, 'Санкт-Петербург')"

try:

cur.execute("SET NAMES utf8") # Кодировка соединения

cur.execute(sql_1)

cur.execute(sql_2)

except MySQLdb.DatabaseError, err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

con.commit()

cur.close()

con.close()

input()

 

 

import MySQLdb

con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="utf8", db="python")

con.autocommit(True) # Автоматическое завершение транзакции

cur = con.cursor()

t1 = ("Москва",) # Запятая в конце обязательна!

t2 = (3, "Новгород")

d = {"id": 4, "name": """Новый ' " город"""}

sql_t1 = "INSERT INTO `city` (`name_city`) VALUES (%s)"

sql_t2 = "INSERT INTO `city` VALUES (%s, %s)"

sql_d = "INSERT INTO `city` VALUES (%(id)s, %(name)s)"

try:

cur.execute("SET NAMES utf8") # Кодировка соединения

cur.execute(sql_t1, t1) # Кортеж из 1-го элемента

cur.execute(sql_t2, t2) # Кортеж из 2-х элементов

cur.execute(sql_d, d) # Словарь

except MySQLdb.DatabaseError, err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

cur.close()

con.close()

input()

 

 

import MySQLdb

con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="utf8", db="python")

con.autocommit(True) # Автоматическое завершение транзакции

cur = con.cursor()

arr = [ ("Пермь",), ("Самара",) ]

sql = "INSERT INTO `city` (`name_city`) VALUES (%s)"

try:

cur.execute("SET NAMES utf8") # Кодировка соединения

cur.executemany(sql, arr) # Выполняем запрос

except MySQLdb.DatabaseError, err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

cur.close()

con.close()

input()

 

 

import MySQLdb

con = MySQLdb.connect(host="localhost", user="root",

passwd="123456", charset="utf8", db="python")

con.autocommit(True) # Автоматическое завершение транзакции

cur = con.cursor()

sql = "INSERT INTO `city` (`name_city`) VALUES ('Омск')"

try:

cur.execute("SET NAMES utf8") # Кодировка соединения

cur.execute(sql)

except MySQLdb.DatabaseError, err:

print("Ошибка:", err)

else:

print("Запрос успешно выполнен")

print("Индекс:", cur.lastrowid)

print("Индекс:", con.insert_id())

cur.close()

con.close()

input()



Поделиться:


Последнее изменение этой страницы: 2016-06-23; просмотров: 264; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.95.233 (0.008 с.)