Usar `check_same_thread=False` permite a FastAPI usar la misma base de datos SQLite en diferentes hilos. Esto es necesario ya que **una sola request** podría usar **más de un hilo** (por ejemplo, en dependencias).
No te preocupes, con la forma en que está estructurado el código, nos aseguraremos de usar **una sola *session* de SQLModel por request** más adelante, esto es realmente lo que intenta lograr el `check_same_thread`.
@ -87,7 +86,7 @@ No te preocupes, con la forma en que está estructurado el código, nos asegurar
Luego añadimos una función que usa `SQLModel.metadata.create_all(engine)` para **crear las tablas** para todos los *modelos de tabla*.
Aquí creamos las tablas en un evento de inicio de la aplicación.
@ -123,7 +122,7 @@ Por ejemplo, si declaras un parámetro de tipo `Hero`, será leído desde el **J
De la misma manera, puedes declararlo como el **tipo de retorno** de la función, y luego la forma de los datos aparecerá en la interfaz automática de documentación de la API.
### Crear con `HeroCreate` y devolver un `HeroPublic`
@ -291,7 +290,7 @@ Este nuevo *modelo de tabla* `Hero` tendrá los campos enviados por el cliente,
Luego devolvemos el mismo *modelo de tabla*`Hero` tal cual desde la función. Pero como declaramos el `response_model` con el *modelo de datos*`HeroPublic`, **FastAPI** usará `HeroPublic` para validar y serializar los datos.
@ -307,13 +306,13 @@ Al declararlo en `response_model` le estamos diciendo a **FastAPI** que haga lo
Podemos hacer lo mismo que antes para **leer**`Hero`s, nuevamente, usamos `response_model=list[HeroPublic]` para asegurar que los datos se validen y serialicen correctamente.
Usar `check_same_thread=False` permite que o FastAPI use o mesmo banco de dados SQLite em diferentes threads. Isso é necessário, pois **uma única requisição** pode usar **mais de uma thread** (por exemplo, em dependências).
Não se preocupe, com a forma como o código está estruturado, garantiremos que usamos **uma única *sessão* SQLModel por requisição** mais tarde, isso é realmente o que o `check_same_thread` está tentando conseguir.
@ -86,7 +85,7 @@ Não se preocupe, com a forma como o código está estruturado, garantiremos que
Em seguida, adicionamos uma função que usa `SQLModel.metadata.create_all(engine)` para **criar as tabelas** para todos os *modelos de tabela*.
Aqui, criamos as tabelas em um evento de inicialização do aplicativo.
@ -122,7 +121,7 @@ Por exemplo, se você declarar um parâmetro do tipo `Hero`, ele será lido do *
Da mesma forma, você pode declará-lo como o **tipo de retorno** da função, e então o formato dos dados aparecerá na interface de documentação automática da API.
### Criar com `HeroCreate` e retornar um `HeroPublic`
@ -290,7 +289,7 @@ Esse novo *modelo de tabela* `Hero` terá os campos enviados pelo cliente, e tam
Em seguida, retornamos o mesmo *modelo de tabela*`Hero` como está na função. Mas como declaramos o `response_model` com o *modelo de dados*`HeroPublic`, o **FastAPI** usará `HeroPublic` para validar e serializar os dados.
@ -306,13 +305,13 @@ Ao declará-lo no `response_model`, estamos dizendo ao **FastAPI** para fazer o
Podemos fazer o mesmo que antes para **ler**`Hero`s, novamente, usamos `response_model=list[HeroPublic]` para garantir que os dados sejam validados e serializados corretamente.
Использование настройки `check_same_thread=False` позволяет FastAPI использовать одну и ту же SQLite базу данных в различных потоках (threads). Это необходимо, когда **один запрос** использует **более одного потока** (например, в зависимостях).
Не беспокойтесь, учитывая структуру кода, мы позже позаботимся о том, чтобы использовать **отдельную SQLModel-сессию на каждый отдельный запрос**, это как раз то, что пытается обеспечить `check_same_thread`.
@ -87,7 +86,7 @@ $ pip install sqlmodel
Далее мы добавляем функцию, использующую `SQLModel.metadata.create_all(engine)`, для того, чтобы создать **таблицы** для каждой из **моделей таблицы**.
Затем мы создадим объявленную (`Annotated`) зависимость `SessionDep`. Мы сделаем это для того, чтобы упростить остальной код, который будет использовать эту зависимость.
В данном примере мы создаем таблицы при наступлении события запуска приложения.
@ -124,7 +123,7 @@ $ pip install sqlmodel
Точно также, вы можете использовать её при объявлении типа значения, возвращаемого функцией, и тогда структурированные данные будут отображены через пользовательский интерфейс автоматически сгенерированной документации FastAPI.
Мы используем зависимость `SessionDep` (сессию базы данных) для того, чтобы добавить нового героя `Hero` в объект сессии (`Session`), сохранить изменения в базе данных, обновить данные героя и затем вернуть их.
@ -132,19 +131,19 @@ $ pip install sqlmodel
Мы можем **читать** данные героев из базы данных с помощью `select()`. Мы можем включить `limit` и `offset` для постраничного считывания результатов.
### Создание героя с помощью `HeroCreate` и возвращение результатов с помощью `HeroPublic`
@ -289,7 +288,7 @@ $ fastapi dev main.py
Далее функция вернёт объект *модели таблицы*`Hero`. Но поскольку, мы объявили `HeroPublic` как модель ответа, то **FastAPI** будет использовать именно её для проверки и сериализации данных.
Мы можем проделать то же самое **для чтения данных** героев. Мы применим модель ответа `response_model=list[HeroPublic]`, и тем самым обеспечим правильную проверку и сериализацию данных.