【问题标题】:What's the difference between 'create_engine' and 'app.config['SQLALCHEMY_DATABASE_URI']'?\'create_engine\' 和 \'app.config[\'SQLALCHEMY_DATABASE_URI\']\' 之间有什么区别?
【发布时间】:2022-12-09 22:15:18
【问题描述】:

create_engine 函数和 app.config['SQLALCHEMY_DATABASE_URI'] 配置键看起来像是在做同样的事情。它们只是连接到数据库的两种不同方式吗?

我在使用 create_engine 连接的 SQLAlchemy 文档中找到了这个:

from sqlalchemy import create_engine
from sqlalchemy import text

engine = create_engine("postgresql+psycopg2://scott:tiger@localhost:5432/mydatabase")

with engine.connect() as connection:
    result = connection.execute(text("select username from users"))
    for row in result:
        print("username:", row["username"])

但是我刚刚完成的网络应用程序只使用这个语句来连接:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@server/db'

【问题讨论】:

    标签: python flask sqlalchemy


    【解决方案1】:

    您的应用程序配置设置只是在环境变量中存储一个字符串变量。这对于数据库连接检查环境变量以查找连接字符串的情况很有用(例如,在许多情况下,生产部署会这样做)。 create_engine 恰好也采用连接字符串,这就是为什么您会看到相似之处。但这是一个在应用程序中与 sqlalchemy 一起使用的内存对象,而不仅仅是一个字符串变量!根据 sqlalchemy 文档,Engine 最基本的功能是提供对 Connection 的访问,然后 Connection 可以调用 SQL 语句- 见working with engines and connections

    实际上,您的 Web 应用程序看起来像是通过使用环境变量来处理数据库连接。老实说,您必须有两种不同的方式连接到您的数据库,一种用于“本地开发工作”,一种用于“已部署的 Web 应用程序”。

    【讨论】:

      猜你喜欢
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 1970-01-01
      • 2015-05-08
      • 2018-12-23
      • 2010-11-07
      • 2014-07-20
      相关资源
      最近更新 更多