【问题标题】:How To Get SQLAlchemy To Connect MSSQL to AWS Using a Config File?如何让 SQLAlchemy 使用配置文件将 MSSQL 连接到 AWS?
【发布时间】:2019-01-26 08:55:09
【问题描述】:

版本

Mac OSX 10.13.6 (17G65)

AWS RDS MSSQL 实例 Select @@VERSION; Microsoft SQL Server 2017

python3 -VPython 3.7.0

pip3 show Flask-SQLAlchemy 名称:Flask-SQLAlchemy V:2.3.2

pip3 show Flask-Migrate 名称:Flask-Migrate V:2.2.1

config.py

​​>
class Config(object):
    """Docstring for Config Class."""

    SECRET_KEY = os.environ.get('SECRET_KEY') or 'you-will-never-guess'
    SQLALCHEMY_DATABASE_URI = (os.environ.get('DATABASE_URL'))

.env

SECRET_KEY=SuperDuperSecretPassKey
DATABASE_URL='mssql+pyodbc://DRIVER={ODBC Driver 17 for SQL Server};SERVER=My-custom-route.a0aaa0000aaaa.us-east-1.rds.amazonaws.com;DATABASE=Databasetoconnectto;UID=JayRizzo;PWD=SuperAwesomePassword!!!'

问题:

如何在我的配置中正确设置 SQLAlchemy URL?

  1. 编码或解码的 URL?
  2. 我可以使用 URL 字符串吗?
  3. 必须是 DSN 吗?

注意:

我可以使用模板和 python 文件直接连接,例如 Connect to MSSQL Database using Flask-SQLAlchemyeven using pyodbc that I created.

但是当我使用 env 变量时,我得到的错误包括:

  1. 值必须是字符串配置
  2. 无法从字符串 '%s'" % name 解析 rfc1738 URL
  3. sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('IM012', '[IM012] [unixODBC][Driver Manager]DRIVER 关键字语法错误 (0) (SQLDriverConnect)') (此错误的背景:@ 987654323@)
  4. sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found and no default driver specified (0) (SQLDriverConnect)') (背景关于这个错误:http://sqlalche.me/e/rvf5)

我被难住了...

【问题讨论】:

    标签: sql-server python-3.x flask flask-sqlalchemy flask-migrate


    【解决方案1】:
    • 我可以使用 URL 字符串吗?
      • 到目前为止我还没有做到。
    • 编码或解码的网址?
    • 必须是 DSN 吗?
      • 是的,到目前为止,这是有效的。

    使用 DSN

    嗯,我能够使用 DSN 进行连接,这是一项有趣的研究……

    1. 检查您的 odbcinst 驱动程序和配置
    $ odbcinst -j 
    
    unixODBC 2.3.7
    DRIVERS............: /usr/local/etc/odbcinst.ini
    SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
    FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
    USER DATA SOURCES..: /Users/jkirchoff/.odbc.ini
    SQLULEN Size.......: 8
    SQLLEN Size........: 8
    SQLSETPOSIROW Size.: 8
    

    然后查看、自定义、验证您的 odbcinst.ini 和 odbc.ini 文件。

    /usr/local/etc/odbcinst.ini

    [My_installed_ODBC_driver]
    Description=Microsoft ODBC Driver 17 for SQL Server
    Driver=/usr/local/lib/libmsodbcsql.17.dylib
    Driver=/usr/local/Cellar/msodbcsql17/17.2.0.1/lib/libmsodbcsql.17.dylib
    UsageCount=1
    

    重要提示:请确保检查驱动程序的路径是否存在!

    .

    注意:是的,我知道有两个驱动程序位置,第一个是符号链接,另一个是实际位置。它仍然适用于列出的一个或两个。它只是为好奇的人准备的。

    /usr/local/etc/odbc.ini

    [MY_Custom_DSN_NAME]
    Driver              = My_installed_ODBC_driver
    Description         = My Connection to AWS
    Database            = MyDatabaseNameHERE
    Server              = My-custom-route.a0aaa0000aaaa.us-east-1.rds.amazonaws.com
    Readonly            = No
    Port                = 1433
    Trace               = No
    

    确保与您的驱动程序的命名约定相匹配 My_installed_ODBC_driver 是我的示例。

    然后将您的 .env 文件设置为包含与上面列出的 DSN_name 的连接将是

    [你的烧瓶项目的根目录]/.env

    DATABASE_URL='mssql+pyodbc://JayRizzo:SpaceInvaderPassword!@MY_Custom_DSN_NAME'
    

    注意:考虑Linkup,应该如下odbcinst.ini提供驱动程序到>odbc.ini提供DSN名称到>.env[MY_Custom_DSN_NAME]

    相反的Env 文件引用odbc,它引用驱动程序的odbcinst。你想怎么想。

    终于

    My_installed_ODBC_driver & MY_Custom_DSN_NAME 可以是您想要的任何名称。只需确保它们正确匹配,(这是我的问题的一部分,最初是尝试使用 DSN。)

    我无法使用直接连接网址。

    到目前为止,我只能使用 DSN 进行连接。

    现在我可以使用 SQLAlchemy flask db upgrade & flask db migrate

    任何见解都会很好。

    希望你能遵循我的逻辑。

    链接

    SQLAlchemy can't connect to an mssql database

    【讨论】:

      猜你喜欢
      • 2020-10-08
      • 2018-03-26
      • 2013-09-30
      • 2020-09-15
      • 2022-09-29
      • 2018-10-29
      • 2016-01-27
      • 1970-01-01
      • 2021-02-01
      相关资源
      最近更新 更多