Найти - Пользователи
Полная версия: sqlite3, like и string substitution
Начало » Базы данных » sqlite3, like и string substitution
1
vanvanov
Добрый день!

Мне нужно создать транзакцию, включающую 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” могут быть произвольные слова. Вероятно, подстановка строк средствами Питона - не лучший вариант, но я не знаю, как по-другому сцепить строки для транзакции.
FishHook
 db.autocommit(False)
cursor = db.cursor()
try:
 cursor.execute("Your SQL")
 cursor.execute("Another sql")
 db.commit()
except:
 db.rollback()
vanvanov
FishHook
Спасибо! Мне кажется, или единая транзакция все равно быстрее выполняется через executescript?
FishHook
vanvanov
Мне кажется, или единая транзакция все равно быстрее выполняется через executescript?
Вы вполне способны написать небольшой скрипт и замерить среднее время выполнения разных способов. От себя скажу, что во-первых транзакции не для того, чтобы ускорять время выполнения запроса, а для сохранения целостности данных, а во-вторых Sqlite - не та СУБД, которую используют в высоконагруженном проекте.
MaratD
Здравствуйте. А как можно замерять время выполнения скриптов?
FishHook
MaratD
Вы тему топика и форума вообще видели? Какое отношение ваш попрос имеет к базам данных sqlite3, like и string substitution в частности?
Не надо так делать.
vanvanov
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 с.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB