Har*_*son 10 python sql-server flask-sqlalchemy
我正在尝试通过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
Run Code Online (Sandbox Code Playgroud)
正如您在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)
Run Code Online (Sandbox Code Playgroud)
然后,我通过执行这两行,使用Pycharm中的Python控制台连接到数据库:
>>> from LendApp import db
>>> db.create_all()
Run Code Online (Sandbox Code Playgroud)
这导致以下错误:
DBAPIError: (pyodbc.Error) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)
我唯一能想到的是我的数据库连接字符串不正确.我已经尝试将其更改为更多标准的Pyodbc连接字符串,包括driver={SQL SERVER}但不占优势.
如果有人能帮助我,我将非常感激.
谢谢
Mat*_*amp 12
所以我只是遇到了一个非常类似的问题,并且能够通过以下方式解决问题.
按照SQL Alchemy文档,我发现我可以使用我的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
Run Code Online (Sandbox Code Playgroud)
这导致了一个额外的错误,因为我也使用Flask-Migrate,显然它不喜欢连接URI中的%.所以我做了一些挖掘并找到了这篇文章.然后我在我的./migrations/env.py文件中更改了以下行
从:
from flask import current_app
config.set_main_option('sqlalchemy.url',
current_app.config.get('SQLALCHEMY_DATABASE_URI'))
Run Code Online (Sandbox Code Playgroud)
至:
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)
Run Code Online (Sandbox Code Playgroud)
完成所有这些后,我能够进行迁移,现在看起来好像一切正常.
如果有人仍然偶然发现这个问题并试图找出另一个解决方案,那么尝试使用pymssql而不是pyodbc;
pip install pymssql
连接 URI 将是:
conn_uri = "mssql+pymssql://<username>:<password>@<servername>/<dbname>"
我刚刚改变了我的连接字符串,就像这样,它工作得很好
注意:您需要安装 pyodbc 才能工作......
app.config["SQLALCHEMY_DATABASE_URI"] = "mssql+pyodbc://user:pwd@server/database?driver=SQL+Server"
Run Code Online (Sandbox Code Playgroud)
注意:密码中尽量避免使用“@”字符。您将收到错误,因为连接字符串在密码后也有“@”字符。这也可能导致连接错误
| 归档时间: |
|
| 查看次数: |
16375 次 |
| 最近记录: |