Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Сохранение в таблице даты и времениСодержание книги
Поиск на нашем сайте
Листинг 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.142.255.103 (0.008 с.) |