cur.execute(f'''INSERT OR IGNORE INTO "base" (title, a, b, c, url)
VALUES ("{title}", {a}, {b}, {c}, "{url}");''')
import sqlite3
connection = sqlite3.connect(":memory:")
connection.enable_load_extension(True)
connection.load_extension("./unicode.dll")
db = sqlite3.connect('dab.db')
db - не подходящее имя(может завести в заблуждение)sql = db.cursor()
sql - не подходящее имя(может завести в заблуждение)db.commit()
после соединения не нужно делать коммитsql.execute(f"SELECT name FROM users WHERE name = '{user_name}' ")
уберите к чертям 'f' строки из sql запросов! global user_name
global нужно использовать тогда, когда у вас есть достаточный опыт программирования на Python, и вы знаете что делаете.import sqlite3
conn = sqlite3.connect('1.db')
cursor = conn.cursor()
cursor.execute("""CREATE TABLE IF NOT EXISTS prices_average2 (
Сервер TEXT,
Категория TEXT,
Предмет TEXT,
Цена BIGINT,
День BIGINT,
Час BIGINT
)""")
cursor.execute('SELECT * FROM prices_average')
rows = cursor.fetchall()
unique_list = []
for row in rows:
if row in unique_list:
pass
else:
cursor.execute('INSERT INTO prices_average2 VALUES(?,?,?,?,?,?)',row)
unique_list.append(row)
conn.commit()
conn.close()
global db???
global sql
Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack (see https://xkcd.com/327/ for humorous example of what can go wrong).
import sqlite3
conn = sqlite3.connect('users.db')
cursor = conn.cursor()
cursor.execute('''CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT,
user_name TEXT,
user_id TEXT,
user_status TEXT
)''')
cursor.execute('DELETE FROM users')
users = [[None,'Валера','123','blocked'],
[None,'Тарас','134','blocked'],
[None,'Степан','145','normal'],
[None,'Абдурахман','168','blocked'],
[None,'Петя','190','normal']]
for user in users:
cursor.execute('INSERT INTO users VALUES(?,?,?,?)',user) # Заполняем таблицу из списка
conn.commit()
result = cursor.execute('SELECT id,user_id FROM users WHERE user_status="blocked"').fetchall()
# Выбираем из базы id(порядковый номер пользователя в базе), user_id - id пользователя в вашей системе только тех пользователей,
# в которыъ статус blocked
for x in result: # перебираем результаты
id,user_id = x # Распаковываем кортеж
cursor.execute('UPDATE users SET user_status=? WHERE id=?',('normal',id)) # обновляем записи в таблице.
# Так как у нас есть порядковый номер пользователя в таблице(id), то обновляем записи этих id и устанавливаем
# user_status в normal
print(f'Статус blocked изменен на normal для следуещего пользователя {user_id}')
conn.commit()
conn.close()
cur.execute("INSERT INTO data VALUES(?,?,?)", (item, ))
кроме item должны быть еще 2 параметра.list = [login,email,password1]
if password2 == password1:
for item in list:
print(item)
cur.execute("INSERT INTO data VALUES(?,?,?)", (item, ))
conn.commit()
if password2 == password1:
cur.execute("INSERT INTO data VALUES(?,?,?)", (login,email,password1,)) # Только поменять параметры местами
conn.commit()
import sqlite3
import time
from datetime import datetime
conn = sqlite3.connect('events.db')
cursor = conn.cursor()
sql = """CREATE TABLE IF NOT EXISTS events(id INTEGER PRIMARY KEY AUTOINCREMENT,
page int,
status text,
date text)"""
cursor.execute(sql)
def add_event(page,status): # Метод добавления в базу: page - номер текущей страници, status - OK или ERROR
date_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute("INSERT INTO events VALUES(?,?,?,?)",(None, page, status, date_now))
conn.commit()
pass
max_page = 5
for page in range(1,max_page+1):
try:
# Тут сам парсинг, или метод парсинга
print(f'Завершено скачивание данных {str(page)} из {str(max_page)} страниц')
add_event(page,'OK')
time.sleep(0.5)
except:
print(f'Ошибка парсинга на странице {page}')
add_event(page,'ERROR')
conn.close()
cur.execute("UPDATE telebot228 SET name=? WHERE id =?",(jo,g))
Модуль sqlite — Работаем с базой данныхtelebot228А Юля у вас клиент, или закладчица?
Использование SQLite в многопоточных приложениях
SQLite может быть собран в однопоточном варианте (параметр компиляции SQLITE_THREADSAFE = 0).
В этом варианте его нельзя одновременно использовать из нескольких потоков, поскольку полностью отсутствует код синхронизации. Зачем? Для бешеной скорости.
Проверить, есть ли многопоточность можно через вызов sqlite3_threadsafe(): если вернула 0, то это однопоточный SQLite.
По умолчанию, SQLite собран с поддержкой потоков (sqlite3.dll).
Есть два способа использования многопоточного SQLite: serialized и multi-thread.
Serialized (надо указать флаг SQLITE_OPEN_FULLMUTEX при открытии соединения). В этом режиме потоки могут как угодно дергать вызовы SQLite, никаких ограничений. Но все вызовы блокируют друг друга и обрабатываются строго последовательно.
Multi-thread (SQLITE_OPEN_NOMUTEX). В этом режиме нельзя использовать одно и то же соединение одновременно из нескольких потоков (но допускается одновременное использование разных соединений разными потоками). Обычно используется именно этот режим.