Переноси сразу на облачный сервис, чо уж там.)))
Ну я не вижу большой разницы - залить скрипт или развернуть сайт) Но если там секурность и прочее - значит нужно написать скрипт, написать скрипт для его развертывания и все. С пхпшным не помогу, но думаю это такая же простая задача как на питоне.
Это нормально, не все операции работают в памяти. Ну и надо смотреть особенности мускли, я давно от нее отказался, постгрес лучше. Я говорю исходя из моего опыта, буфферизация отличается в разных реляционных базах.
а где это он заблокирован?
А я думал что такое давно в прошлом. В Польше с таким вообще строго. Ну и снять квартиру без договора - чревато проблемами.Кстати для ВНЖ тоже нужен контракт на жилье. Не уверен, что прокатит липовый, в ужонде могут проверить.
VPN - Virtual Private Network, c каких это пор они запрещены даже в россии? Под VPN можно например развернуть сервер, к кторому есть доступ только у работников компании.
В твоем случае человечество ничего не потеряет если пропадет такой гег=ниальный сайт из то-50 по версии журнала работница и крестьянка. 😀
В плане бэкапа вполне можно хранить на твердотельном, если твой шкаф постоянно подвергается опасности урониться. Надежность SSD измеряется в циклах чтения записи и в режиме бэкапа тебе его хватит на десятки лет.
Указывать родительский пункт.
Но потом еще обрабатывать ответ. С утра набросал сравнительный профайлер по времени и простенький код
import osimport timeimport jsonimport functoolsfrom sqlalchemy import create_engine, textfrom sqlalchemy.orm import sessionmakerdef profiler(func): @functools.wraps(func) def wrapper(*args, **kwargs): start_time = time.time() # Start the timer result = func(*args, **kwargs) # Execute the function end_time = time.time() # End the timer execution_time = end_time - start_time # Calculate the execution time print(f"Execution time for {func.__name__}: {execution_time:.4f} seconds") return result # Return the function result return wrapper@profilerdef get_language_db(): connector = "postgresql+psycopg2://postgres:postgres@localhost:5432/simple_db" engine = create_engine( connector, connect_args={"options": "-c timezone=utc", "connect_timeout": 30}, ) Session = sessionmaker(bind=engine, expire_on_commit=False) session = Session() try: result = session.execute(text("SELECT * FROM menu")) return result.fetchall() # Fetch all the results finally: session.close()@profilerdef get_language_from_file(lang: str = "en") -> dict: file_name = "lang_settings.json" file_path = "".join((os.getcwd(), "/settings/", file_name)) with open(file_path, "r") as f: data = json.load(f) lang = data.get(lang) if not lang: return data.get("en") return langif __name__=="__main__": print(get_language_from_file()) print(get_language_db())
И вот результат без кэширования работы с базой:
Файл:
Execution time for get_language: 0.0002 seconds
{'subjects': {'subjects': {'chemistry': 'chemistry', 'math': 'mathematics'}}, 'mentors': 'mentors', 'scheduler': 'scheduler', 'news': 'news', 'adverts': 'adverts'}
База:
Execution time for get_language_db: 0.1151 seconds
[('en ', 'mentee ', 'mentee '), ('en ', 'mentor ', 'mentor '), ('en ', 'news ', 'news '), ('en ', 'advert ', 'advert '), ('en ', 'schedule ', 'schedule '), ('en ', 'schedule ', 'schedule '), ('en ', 'schedule ', 'schedule '), ('en ', 'schedule ', 'schedule '), ('en ', 'schedule ', 'schedule ')]
Обратите внимание, в каком виде ответ. Из файла я сразу получаю удобоваримый json, который могу отдавать в шаблонизатор.Из базы мне еше нужно написать обработчик, который сконвертит список в json.
Натыкать кнопок?? Создать 2 шаблона и два языковых файла? Это вообще не SOLID 😀