【问题标题】:Connecting to MSSQL in Flask using Flask-SQLAlchemy and pyodbc使用 Flask-SQLAlchemy 和 pyodbc 连接到 Flask 中的 MSSQL
【发布时间】:2018-10-29 00:01:34
【问题描述】:

我无法使用 Flask-SQLALchemypyodbc 连接到 MSSQL Server 2016 数据库。我已经通过 Google 进行了搜索,但没有一个解决方案有效。

我收到以下错误:

sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', u'[IM002] [Microsoft][ODBC Driver Manager] 未找到数据源名称 并且没有指定默认驱动程序 (0) (SQLDriverConnect)')

我当前的本地环境是:

  • Windows 7 专业版
  • Python 2.7

我可以只用 pyodbc 而没有 Flask 连接到数据库。

import pyodbc
server = '<server>'
database = '<database>'
username = '<username>'
password = '<password>'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER='+server+';PORT=1443;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

#Select Query
print ('Reading data from table')
tsql = "SELECT DISTINCT TOP 10 * FROM dbo.Test;"
with cursor.execute(tsql):
    row = cursor.fetchone()
    while row:
        print (str(row[0]) + " " + str(row[1]))
        row = cursor.fetchone()

应用程序代码片段

config.py

SQLALCHEMY_DATABASE_URI = mssql+pyodbc:///?odbc_connect="DRIVER={ODBC Driver 13 for SQL Server};SERVER=<server>;DATABASE=<database>;UID=<username>;PWD=<password>
SQLALCHEMY_TRACK_MODIFICATIONS = False

__init__.py

import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from config import Config

db = SQLAlchemy()
migrate = Migrate()

def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    migrate.init_app(app, db)

    from app.errors import bp as errors_bp
    app.register_blueprint(errors_bp)

    from app.main import bp as main_bp
    app.register_blueprint(main_bp)

    return app

from app import models

【问题讨论】:

    标签: python sql-server flask sqlalchemy pyodbc


    【解决方案1】:

    这应该作为您的SQLALCHEMY_DATABASE_URI 连接值:

    mssql://user:pwd!@PATH_TO_MSSQL_LOCATION?driver=SQL+Server+Native+Client+11.0
    

    您可能需要上下试验不同的版本号,尽管本机驱动程序的版本可能是可以确定的。

    【讨论】:

    • PATH_TO_MSSQL_LOCATION 的确切值是多少?
    • 我尝试使用下面的字符串:mssql+pyodbc://uesr_name:Pass@./db_name?driver=ODBC+Driver+17+for+SQL+Server
    • @chetan 'PATH_TO_MSSQL_LOCATION' 应替换为托管您的 MSSQL 实例的服务器名称。
    【解决方案2】:

    一旦您知道您的 ODBC 驱动程序版本,请尝试以下操作:

    import urllib
    
    params = urllib.parse.quote_plus("DRIVER={ODBC Driver version};\
                                       SERVER=servername;\
                                       DATABASE=databasename;\
                                       UID=username;PWD=password")
     
    SQLALCHEMY_DATABASE_URI = "mssql+pyodbc:///?odbc_connect=%s" % params
    

    【讨论】:

      猜你喜欢
      • 2018-03-26
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      相关资源
      最近更新 更多