2017-10-13 946 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) 

做的這一切,我能夠做我的遷移後,一切好像是現在正確工作。

相關問題