Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Янв. 24, 2018 15:21:15

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 189
Репутация: +  3  -
Профиль   Отправить e-mail  

sqlite3, like и string substitution

Добрый день!

Мне нужно создать транзакцию, включающую LIKE. Примерный код такой:

 import sqlite3
db  = sqlite3.connect(':memory:')
dbc = db.cursor()
dbc.execute ('create table if not exists DATA (\
              NO         integer primary   \
                         key autoincrement \
             ,PASTE      text              \
                                              )'
            )
dbc.execute ('insert into DATA values (?,?)',(None,'liker'))
dbc.execute ("select NO from DATA where PASTE like '%like%'")
print(dbc.fetchall())
db.close()
Данный код находит liker по запросу like. Но мне нужно оформить это в виде транзакции, поскольку нужно будет делать UPDATE. Пытаюсь реализовать через подстановку строк:
 query = 'begin;'
query += 'select NO from DATA where PASTE like "%s"' % "%{0}%".format('like')
query += ';commit;'
print(query)
dbc.executescript(query)
Пробовал по-разному, но либо не находит ничего, либо Syntax Error. Вместо “like” и “liker” могут быть произвольные слова. Вероятно, подстановка строк средствами Питона - не лучший вариант, но я не знаю, как по-другому сцепить строки для транзакции.

Офлайн

#2 Янв. 24, 2018 16:49:09

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 6576
Репутация: +  446  -
Профиль   Отправить e-mail  

sqlite3, like и string substitution

 db.autocommit(False)
cursor = db.cursor()
try:
 cursor.execute("Your SQL")
 cursor.execute("Another sql")
 db.commit()
except:
 db.rollback()



Офлайн

#3 Янв. 26, 2018 00:37:00

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 189
Репутация: +  3  -
Профиль   Отправить e-mail  

sqlite3, like и string substitution

FishHook
Спасибо! Мне кажется, или единая транзакция все равно быстрее выполняется через executescript?

Отредактировано vanvanov (Янв. 26, 2018 00:37:36)

Офлайн

#4 Янв. 26, 2018 06:07:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 6576
Репутация: +  446  -
Профиль   Отправить e-mail  

sqlite3, like и string substitution

vanvanov
Мне кажется, или единая транзакция все равно быстрее выполняется через executescript?
Вы вполне способны написать небольшой скрипт и замерить среднее время выполнения разных способов. От себя скажу, что во-первых транзакции не для того, чтобы ускорять время выполнения запроса, а для сохранения целостности данных, а во-вторых Sqlite - не та СУБД, которую используют в высоконагруженном проекте.



Офлайн

#5 Фев. 1, 2018 17:25:00

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3, like и string substitution

Здравствуйте. А как можно замерять время выполнения скриптов?

Офлайн

#6 Фев. 1, 2018 18:21:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 6576
Репутация: +  446  -
Профиль   Отправить e-mail  

sqlite3, like и string substitution

MaratD
Вы тему топика и форума вообще видели? Какое отношение ваш попрос имеет к базам данных sqlite3, like и string substitution в частности?
Не надо так делать.



Офлайн

#7 Фев. 1, 2018 20:29:45

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 189
Репутация: +  3  -
Профиль   Отправить e-mail  

sqlite3, like и string substitution

MaratD
Здравствуйте. А как можно замерять время выполнения скриптов?
 >>> import time
>>> start = time.time()
>>> end = time.time()
>>> end - start
4.233328580856323
Можете также воспользоваться классом Timer отсюда:
 >>> import shared as sh
>>> timer = sh.Timer('Моя функция')
>>> timer.start()
>>> timer.end()
0:Моя функция:ИНФОРМАЦИЯ:Операция завершена за 4.374298 с.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version