连接到动态数据库参数sqlalchemy

时间:2016-01-29 18:14:56

标签: python mysql flask sqlalchemy flask-sqlalchemy

我正在使用sqlalchemy连接我的数据库以获取我的python API,如下所示:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'

我的问题是这个项目中的其他开发人员有不同的数据库用户名/密码。每当我们使用git推送时,我们必须重置值以适应开发人员数据库。有没有办法从文件中获取sqlalchemy?这样我们就可以将它添加到.gitignore。

或者有更简单的方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

您想为此设置环境变量。由于每个环境对于其运行的机器而言是唯一的,因此每个团队成员将从其各自的环境中获取自己的连接字符串。我将展示一个Zsh shell的示例,但Bash或其他shell应该是等效的。

创建一个名为〜/ .zshenv的文件(如果已经存在的话)

在此文件中,添加以下行:

export DB_CONNECTION_STRING="mysql://username:password@localhost/dbname"

请注意,变量定义及其值之间应该有无空格(即等号周围没有空格)。这对Zsh来说是一个问题。

要应用此变量,请运行source ~/.zshenv。它将在重新启动时自动加载,但我们不希望每次更改环境变量时都注销/登录。通过运行printenv | grep DB_CONNECTION_STRING验证变量是否已定义。

在烧瓶中,只需定义以下内容(记住顶部的import os):

app.config['SQLALCHEMY_DATABASE_URI'] = os.environ.get('DB_CONNECTION_STRING')

使用环境变量真的是要走的路。我曾经硬编码东西,这是不好的做法,正如你所看到的,即使像多个用户连接到同一个数据库那样微不足道也会出现问题。

编辑:请参阅@ rmn关于实例文件夹刻录功能的评论;似乎是环境变量的可靠替代品(当然,这仅限于Flask应用程序,环境变量可用于任何事物)

答案 1 :(得分:0)

替代方法 - 每个开发人员都可以在git忽略的文件中使用本地设置,例如local_config.py

然后你就这样使用它:

try:
    import local_config
    app.config['SQLALCHEMY_DATABASE_URI'] = local_config.DB_URI
except ImportError:
    print "No Local config, use defaults"
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'

如果要设置许多参数,这可能很有用。

您可以在存储库中保留local_config.py.example之类的内容,其中列出了所有参数。然后每个人都可以将其重命名为local_config.py并自定义参数。