Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 345; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.220 (0.008 с.) |