我在AWS RDS上部署了一个MS-SQL,我正在编写Flask前端。 我一直在关注一些介绍Flask教程,所有这些教程似乎都在连接字符串URI中传递了DB凭据。我在这里遵循教程:
https://medium.com/@rodkey/deploying-a-flask-application-on-aws-a72daba6bb80#.e6b4mzs1l
对于部署,是否提示输入数据库登录信息并添加到连接字符串?如果是的话,在哪里?使用SQLAlchemy,我没有看到对create_engine的任何调用(使用教程中的代码),我只是看到使用config.from_object进行初始化,引用存储SQLALCHEMY_DATABASE_URI
的config.py,其中指向到DB位置。尝试从我的应用程序中调用config.update(dict(UID='****', PASSWORD='******'))
没有任何效果,查看配置字典似乎没有为此目的设置任何适用的条目。我做错了什么?
或者我应该使用Flask-User进行身份验证,然后摆脱数据库级别的身份验证?我更喜欢在DB层进行身份验证,以方便使用。
答案 0 :(得分:1)
您正在使用的教程使用Flask-Sqlalchemy来抽象数据库设置内容,这就是您没有看到engine.connect()的原因。
像Flask-Sqlalchemy这样的框架是围绕这样的想法而设计的,即在启动时为数据库创建连接池,并在各种工作线程之间共享该池。你无法将它用于你正在做的事情......它负责在过程的早期初始化会话和事情。
由于您的要求,我不知道您可以使用连接池之类的东西。相反,你必须自己处理。实际的联系并不太难......
engine = create_engine('dialect://username:password@host/db')
connection = engine.connect()
result = connection.execute("SOME SQL QUERY")
for row in result:
# Do Something
connection.close()
问题是您必须在每个端点都这样做。数据库连接不是您可以存储在会话中的内容 - 您必须在其中存储凭据并在您编写的每个端点中执行连接/断开连接。更糟糕的是,您必须弄清楚加密会话或服务器端会话(没有数据库连接!),以防止会话中的这些凭据成为可怕的安全漏洞。
我向您保证,现在和从长远来看,找出一种对用户进行身份验证的简单方法会更容易,这样他们就可以共享从应用程序端点抽象出来的连接池。但是,如果你必须这样做,这就是你将如何做到这一点。 (确保每次都关闭这些连接!)