【问题标题】:Connect to MSSQL Database using Flask-SQLAlchemy使用 Flask-SQLAlchemy 连接到 MSSQL 数据库
【发布时间】:2018-03-26 03:26:52
【问题描述】:

我正在尝试通过 Flask-SQLAlchemy 连接到本地 MSSQL DB。

这是我的__init__.py 文件中的代码摘录:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pyodbc://HARRISONS-THINK/LendApp'
db = SQLAlchemy(app)

SQLALCHEMY_TRACK_MODIFICATIONS = False

正如您在 SQL Server Management Studio 中看到的,此信息似乎匹配:

这是在我的models.py 文件中创建的一个简单表:

from LendApp import db

class Transaction(db.model):
    transactionID = db.Column(db.Integer, primary_key=True)
    amount = db.Column(db.Integer)
    sender = db.Column(db.String(80))
    receiver = db.Column(db.String(80))

    def __repr__(self):
        return 'Transaction ID: {}'.format(self.transactionID)

然后我通过执行以下两行使用 Pycharm 中的 Python 控制台连接到数据库:

>>> from LendApp import db
>>> db.create_all()

这会导致以下错误:

DBAPIError: (pyodbc.Error) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')

我唯一能想到的是我的数据库连接字符串不正确。我已尝试将其更改为更多标准 Pyodbc 连接字符串,包括 driver={SQL SERVER},但没有成功。

如果有人能帮我解决这个问题,我们将不胜感激。

谢谢

【问题讨论】:

    标签: python sql-server flask-sqlalchemy


    【解决方案1】:

    所以我刚刚遇到了一个非常相似的问题,并且能够通过执行以下操作来解决。

    按照SQL Alchemy documentation,我发现我可以像这样使用我的pyodbc连接字符串:

    # Python 2.x
    import urllib
    params = urllib.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")
    engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
    
    # Python 3.x
    import urllib
    params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 10.0};SERVER=dagger;DATABASE=test;UID=user;PWD=password")
    engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
    
    
    # using the above logic I just did the following
    params = urllib.parse.quote_plus('DRIVER={SQL Server};SERVER=HARRISONS-THINK;DATABASE=LendApp;Trusted_Connection=yes;')
    app.config['SQLALCHEMY_DATABASE_URI'] = "mssql+pyodbc:///?odbc_connect=%s" % params
    

    这导致了一个额外的错误,因为我也在使用 Flask-Migrate,显然它不喜欢连接 URI 中的 %。所以我做了更多的挖掘,发现了这个post。然后我在./migrations/env.py 文件中更改了以下行

    发件人:

    from flask import current_app
    config.set_main_option('sqlalchemy.url',
                       current_app.config.get('SQLALCHEMY_DATABASE_URI'))
    

    收件人:

    from flask import current_app
    db_url_escaped = current_app.config.get('SQLALCHEMY_DATABASE_URI').replace('%', '%%')
    config.set_main_option('sqlalchemy.url', db_url_escaped)
    

    在完成所有这些之后,我能够进行迁移,并且现在一切似乎都可以正常工作了。

    【讨论】:

      【解决方案2】:

      如果有人仍然偶然发现此问题并试图找出其他解决方案,请尝试使用 pymssql 而不是 pyodbc;

      pip install pymssql

      连接 URI 将是:

      conn_uri = "mssql+pymssql://<username>:<password>@<servername>/<dbname>"

      【讨论】:

        【解决方案3】:

        我刚刚更改了类似这样的连接字符串,并且效果很好

        注意:您需要安装 pyodbc 才能工作....

        app.config["SQLALCHEMY_DATABASE_URI"] = "mssql+pyodbc://user:pwd@server/database?driver=SQL+Server"
        

        【讨论】:

          【解决方案4】:

          我遇到了同样的问题,通过指定解决了:

          app = Flask(__name__)
          app.config["SQLALCHEMY_DATABASE_URI"] = "mssql+pyodbc://MySQLServerName/MyTestDb?driver=SQL+Server?trusted_connection=yes"
          app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
          db.init_app(app)
          

          【讨论】:

            【解决方案5】:

            我相信您的连接字符串缺少身份验证详细信息。从 Flask-SQLAlchemy 文档中,连接字符串应具有以下格式

            dialect+driver://username:password@host:port/database
            

            从您的示例中,我相信它看起来像这样

            app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pyodbc://<username>:<password>@<Host>:<Port>/LendApp'
            

            【讨论】:

              【解决方案6】:

              使用以下解决方案,我可以解决与 MSSQL 服务器的连接问题

              params = urllib.parse.quote_plus('DRIVER={SQL Server};SERVER=HARRISONS-THINK;DATABASE=LendApp;Trusted_Connection=yes;')
              app.config['SQLALCHEMY_DATABASE_URI'] = "mssql+pyodbc:///?odbc_connect=%s" % params
              

              如果您因用户错误而登录失败,请转到此 http://itproguru.com/expert/2014/09/how-to-fix-login-failed-for-user-microsoft-sql-server-error-18456-step-by-step-add-sql-administrator-to-sql-management-studio/.

              【讨论】:

                猜你喜欢
                • 2018-10-29
                • 2013-03-15
                • 1970-01-01
                • 2018-06-13
                • 1970-01-01
                • 2019-10-01
                • 2021-11-02
                • 2018-02-09
                • 2022-09-23
                相关资源
                最近更新 更多