您的方法在技术上是可行的,但它不是最有效或可扩展的方法,尤其是当数据库的大小增加时。持续查询数据库中可能未更改的数据可能会带来不必要的开销,并降低应用程序的速度。
一种更有效的方法是实现缓存机制来存储以前检索到的数据,并且只在必要时查询数据库。您可以使用内存化等技术,也可以使用Redis等工具实现缓存层。
以下是使用简单缓存机制修改的代码版本:
# Import the necessary modules
import mysql.connector
# Initialize database connection
db_connection = mysql.connector.connect(
host="your_host",
user="your_username",
password="your_password",
database="your_database"
)
cursor = db_connection.cursor()
# Define global variables
subscribers = []
admins = []
blacklist = []
dictionary = {}
users = []
# Function to fetch data from the database or cache
def fetch_data(query, cache):
if cache is None:
cursor.execute(query)
return [i[0] for i in cursor.fetchall()]
else:
return cache
# Function to update data
def update(sub=False, adm=False, bkl=False, dct=False, usr=False) -> None:
global subscribers, admins, blacklist, dictionary, users
if sub:
subscribers = fetch_data("SELECT id FROM users WHERE is_subscribed = TRUE", subscribers)
if adm:
admins = fetch_data("SELECT id FROM users WHERE is_admin = TRUE", admins)
if bkl:
blacklist = fetch_data("SELECT id FROM users WHERE is_banned = TRUE", blacklist)
if usr:
users = fetch_data("SELECT id FROM users", users)
if dct:
dictionary = fetch_data("SELECT ukr, rus FROM vocabulary", dictionary)
# Example usage:
update(sub=True, adm=True, bkl=True, dct=True, usr=True)