首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >SQLAlchemy没有正确地创建内存中的数据库

SQLAlchemy没有正确地创建内存中的数据库
EN

Stack Overflow用户
提问于 2022-11-22 08:45:35
回答 1查看 69关注 0票数 0

使用FastAPI和SQLAlchemy制作API时,当数据库(SQLite)存储在内存中时,我会遇到奇怪的行为,而这在作为文件存储时不会发生。

型号:

代码语言:javascript
运行
AI代码解释
复制
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()

class Thing(Base):
    __tablename__ = "thing"
    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String)

我创建了两个全局引擎对象。一个以数据库为文件,另一个作为内存数据库:

代码语言:javascript
运行
AI代码解释
复制
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

args = dict(echo=True, connect_args={"check_same_thread": False})
engine1 = create_engine("sqlite:///db.sqlite", **args)
engine2 = create_engine("sqlite:///:memory:", **args)
Session1 = sessionmaker(bind=engine1)
Session2 = sessionmaker(bind=engine2)

我创建了我的FastAPI应用程序和一个将对象添加到数据库中的路径:

代码语言:javascript
运行
AI代码解释
复制
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def foo(x: int):
    with {1: Session1, 2: Session2}[x]() as session:
        session.add(Thing(name="foo"))
        session.commit()

我的主要任务是模拟请求并检查一切是否正常:

代码语言:javascript
运行
AI代码解释
复制
from fastapi.testclient import TestClient

if __name__ == "__main__":
    Base.metadata.create_all(engine1)
    Base.metadata.create_all(engine2)
    client = TestClient(app)
    assert client.get("/1").status_code == 200
    assert client.get("/2").status_code == 200

thing表是在engine1中创建并提交的,与engine2一样。第一个请求成功地将"foo“插入到工程1的数据库(存储为文件),但第二个请求引发"sqlite3.OperationalError”,声称“没有这样的表: thing”。

为何两者之间有不同的行为?为什么内存中的数据库声称表不存在,即使SQLAlchemy日志显示create语句已成功运行并已提交?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-22 18:42:03

文档在下面的https://docs.sqlalchemy.org/en/14/dialects/sqlite.html#using-a-memory-database-in-multiple-threads中解释了这一点

要使用:

:数据库,在多线程场景中,必须在线程之间共享相同的连接对象,因为数据库只存在于该连接的范围内。StaticPool实现将全局维护单个连接,check_same_thread标志可以作为False传递给Pysqlite。

它还展示了如何获得预期的行为,因此在您的情况下

代码语言:javascript
运行
AI代码解释
复制
from sqlalchemy.pool import StaticPool

args = dict(echo=True, connect_args={"check_same_thread": False}, poolclass=StaticPool)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74536228

复制
相关文章
flask 使用sendgrid发送邮件(flask 33)
import sendgrid from sendgrid.helpers.mail import Email as SGEmail, Content, Mail as SGMail from flask_mail import Mail, Message from flask_wtf import FlaskForm from wtforms import StringField, TextAreaField, SubmitField from wtforms.validators import DataRequired, Email from flask import Flask, flash, redirect, url_for, render_template, request
用户5760343
2019/08/13
8470
Linux下使用Shell为SendGrid Email API 发送邮件
将代码存为shell文件,将上一个文件的echo输出改成执行此文件即可自动推送到邮箱。
子润先生
2021/06/14
1.1K0
使用 PHP发送电子邮件
PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义。
小颖club
2022/04/11
2.6K0
python利用flask_mail、sendgrid发送邮件[通俗易懂]
在学习Flask,看的书籍是《Flask Web开发实战 入门、进阶与原理解析》。在学习发送电子邮件这一章节时,遇到一些问题,便写下这一篇文章,记录一下,也希望遇到同样问题的人能够花较少时间在解决问题上。
全栈程序员站长
2022/11/17
1.8K0
python利用flask_mail、sendgrid发送邮件[通俗易懂]
PHP 使用 phpmailer 发送电子邮件
phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
OwenZhang
2021/12/08
2.2K0
PHP 使用 phpmailer 发送电子邮件
使用Python发送自定义电子邮件
电子邮件仍然是事实。 尽管存在各种弊端,但它仍然是向大多数人发送信息的最佳方法,特别是允许邮件排队等待收件人的自动方式。
用户7886150
2021/01/28
2.9K0
发送电子邮件
在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。
用户8442333
2021/05/20
2.4K0
.NET Core 使用MailKit发送电子邮件
发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复,或者文章被其他网站引用时向管理员发送邮件。那么在.NET Core里,如何实现发送电子邮件呢?
Edi Wang
2019/07/08
6.1K0
.NET Core 使用MailKit发送电子邮件
SpringBoot发送邮件+使用html模板发送邮件
这两天在公司做商城系统有一个业务用到了发送邮件功能 springboot 有spring-boot-starter-mail
@依然范特西
2022/12/12
3K0
使用Postfix,Dovecot和MySQL发送电子邮件
在本指南中,您将学习如何在Debian或Ubuntu上使用Postfix,Dovecot和MySQL设置安全的虚拟用户邮件服务器。我们将解释如何创建新的用户邮箱以及如何在配置的域中发送或接收电子邮件。
Techeek
2018/09/18
3.9K0
使用Postfix,Dovecot和MySQL发送电子邮件
Spring发送电子邮件
Spring基于javax.mail封装了一套用于发送电子邮件的API,位于org.springframework.mail包下,下面将介绍下发送普通文本邮件和基于thymeleaf模版的邮件。
布禾
2020/10/29
1.8K0
Spring发送电子邮件
Jenkins使用之邮件模板配置
Jenkins默认提供了一个邮件通知,能在构建失败、构建不稳定等状态后发送邮件。但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容、无法定义发送邮件的格式、无法定义灵活的邮件接收配置等。为解决这些问题,我们将使用 Email Extension 插件。该插件可以自定义邮件通知,如在发送邮件时自定义发送给谁以及具体内容等。本文主要对jenkins的邮件模板配置及通知进行介绍。
用户5521279
2020/03/19
4.5K0
Jenkins使用之邮件模板配置
SpringBoot使用FreeMarker模板发送邮件
由于本文属于付费文章,获取全文,可点击文末【阅读原文】,即可到达【秋码记录】https://qiucode.cn/article/96 1、添加相关依赖 1.1、使用Maven,在pom.xml添加如下依赖: <!-- 邮件所需依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!--
游离于山间之上的Java爱好者
2022/12/19
1.4K0
SpringBoot使用FreeMarker模板发送邮件
PHP 使用 phpmailer 发送电子邮件 以及封装方法
phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
Inkedus
2020/04/16
3.4K0
PHP 使用 phpmailer 发送电子邮件 以及封装方法
Spring Boot发送电子邮件
通过使用Spring Boot RESTful Web服务,可以发送包含Gmail传输层安全性的电子邮件。在本章中,详细了解如何使用此功能。
黑洞代码
2021/10/14
1.4K0
Elasticsearch索引模板与动态mapping模板(四)
前面我们介绍了mapping相关的属性,细心的朋友可能会发现,在我们最开始使用ES的时候,可能还不太了解mapping,也没有添加过mapping为什么我们还是能够正常的添加文档。
问道白发
2019/12/15
5.1K0
Elasticsearch索引模板与动态mapping模板(四)
PHP发送电子邮件代码
注意:PHP 需要一个已安装且正在运行的邮件系统,以便使邮件函数可用。所用的程序通过在 php.ini 文件中的配置设置进行定义。
用户1503405
2021/09/27
1.8K0
如何在FreeBSD 10.1上使用Sendmail通过外部SMTP服务发送电子邮件
设置新的Web服务器时最常见的需求之一是发送电子邮件。最安全,最简单的方法是将服务器连接到SendGrid或Amazon SES等邮件服务。使用外部服务将帮助您避免陷阱,例如您的服务器IP被反垃圾邮件服务列入黑名单。
温浪
2018/10/19
3.2K0
点击加载更多

相似问题

使用sendgrid节点模块,如何发送SendGrid模板引擎电子邮件?

23

使用csv的数据与Sendgrid一起发送电子邮件

19

发送没有模板的Sendgrid电子邮件

17

如何在python中使用sendgrid和动态模板、BCC地址发送电子邮件?

110

Sendgrid:用模板发送电子邮件

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档