Получение функции datetime SQLAlchemy для работы с базой данных SQLitePython

Программы на Python
Ответить
Anonymous
 Получение функции datetime SQLAlchemy для работы с базой данных SQLite

Сообщение Anonymous »

Я перестраиваю серверную часть своего сайта с нуля, используя Python (без фреймворков, а также я новичок в Python), и работаю над сценариями и моделями для создания базы данных для своих сообщений и статей, используя SQLite, SQLAlchemy и Alembic (я тоже новичок во всех трех из них). На данный момент у меня есть скрипты Python для создания ядра базы данных и сеанса (

Код: Выделить всё

dbsite.py
), скрипт для моделей баз данных (

Код: Выделить всё

models.py
), скрипт для построения базы данных (

Код: Выделить всё

dbcreate.py
) и тестовый скрипт для добавления сообщений в базу данных, как только я смогу ее создать без ошибок (

Код: Выделить всё

addpost.py). Вот код всех этих скриптов:
[b]dbsite.py[/b]
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine('sqlite:///site.db', echo=True)

# Create a base class for our models
Base = declarative_base()

# Create a session factory bound to our engine
SessionLocal = sessionmaker(bind=engine)
models.py

Код: Выделить всё

from sqlalchemy import Column, Integer, String, Text, Date
from datetime import datetime, timezone
from dbsite import Base

class Post(Base):
__tablename__ = 'posts'

id = Column(Integer, primary_key=True)
title = Column(String(150), nullable=False)
body = Column(Text)
date = Column(datetime(timezone=True), default=func.now()))
# Tags = TBD, but this will probably be another table for cross-referencing

def __repr__(self):
return f"
"
dbcreate.py

Код: Выделить всё

from dbsite import engine, Base
from models import Post

# Create all tables defined in our models
Base.metadata.create_all(engine)

print("Site database table created!")
В настоящее время dbcreate.py импортирует из dbsite.py и models.py, и когда я запускаю этот сценарий, я получаю эту ошибку в терминале: TypeError: в функции отсутствует обязательный аргумент «год» (поз. 1).
После того, как вы немного покопались здесь и в других частях Интернета, кажется, что SQLite не очень хорошо обрабатывает дату и время из коробки, поэтому мне нужно написать код с использованием SQLAlchemy, чтобы обойти эту проблему, но я не уверен, что мне нужно делать, потому что некоторые примеры, которые я нахожу в Интернете, содержат дополнительные биты, которые не нужны моей базе данных. Например, эта статья добавляет метаданные в движок/базу данных и выглядит так, будто это просто отдельный пример, а не реальный пример (если я не правильно понимаю код).
Все, что я пытаюсь сделать, это добавить столбец даты в базу данных на основе даты добавления статьи или публикации в мою базу данных, в зависимости от того, когда она была добавлена ​​на сервер. Я думаю, что хочу использовать время в формате UTC, чтобы время адаптировалось к тому, где находятся читатели, и я хочу включить ГГГГ ММ ДД плюс день недели, а также ЧЧ:ММ:СС — я буду извлекать части этих данных для разных частей моего сайта, например, все данные о дате/дне недели для каждой статьи, а затем все это плюс время для моего RSS-канала. Имейте в виду, я упомянул теги в models.py для будущих перекрестных ссылок, и мне, возможно, понадобится перекрестная ссылка и на дату, потому что я планирую создавать архивы сообщений на основе года и месяца/года. Не уверен, что это изменит то, как мне следует это кодировать, но я хотел упомянуть об этом, поскольку я еще не зашел так далеко в построении моделей.
Имея все это в виду, как мне следует создавать свои сценарии? Я не привязан ни к какому коду, я просто пытаюсь заставить его работать, поэтому, если мне нужно начать с нуля, я открыт для этого.

Подробнее здесь: https://stackoverflow.com/questions/798 ... e-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»