2017-10-13 1215 views
3

我想通过Flask-SQLAlchemy连接到本地MSSQL数据库。使用Flask-SQLAlchemy连接到MSSQL数据库

下面是从我__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中看到,这个信息似乎一致:

enter image description here

下面是创建在我的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},但没有占上风。

如果有人可以帮助我,这将是高度赞赏。

谢谢

回答

0

我相信你的连接字符串缺少认证细节。从烧瓶SQLAlchemy的文档,连接字符串应具有以下格式

dialect+driver://username:[email protected]:port/database 

从你的榜样,我相信它会是这个样子

app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pyodbc://<username>:<password>@<Host>:<Port>/LendApp' 
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 

然后,这是因为我还使用瓶,迁移,显然它不喜欢%引起的附加误差连接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) 

做的这一切,我能够做我的迁移后,一切好像是现在正确工作。