Conéctese a la base de datos MSSQL usando Flask-SQLAlchemy

Estoy tratando de conectarme a una base de datos MSSQL local a través de Flask-SQLAlchemy.

Aquí hay un extracto de código de mi archivo __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 

Como puede ver en SQL Server Management Studio, esta información parece coincidir:

introduzca la descripción de la imagen aquí

Aquí está la creación de una tabla simple en mi archivo 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) 

Luego me conecto a la base de datos utilizando una Consola Python dentro de Pycharm a través de la ejecución de estas dos líneas:

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

Esto está resultando en el siguiente error:

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

Lo único en lo que puedo pensar es que la cadena de conexión de mi base de datos es incorrecta. He intentado alterarlo a más de una cadena de conexión Pyodbc estándar e incluye driver={SQL SERVER} pero no prevalece.

Si alguien pudiera ayudarme con esto sería muy apreciado.

Gracias

Así que tuve un problema muy similar y pude resolverlo haciendo lo siguiente.

Siguiendo la documentación de Alchemy de SQL , encontré que podía usar la cadena de conexión de mi pyodbc de esta manera:

 # 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 

Esto provocó un error adicional porque también estaba usando Flask-Migrate y aparentemente no me gusta% en la URI de conexión. Así que hice más excavaciones y encontré este post . Luego cambié la siguiente línea en mi archivo ./migrations/env.py

Desde:

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

A:

 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) 

Después de hacer todo esto, pude hacer mis migraciones y todo parece estar funcionando correctamente ahora.

Creo que a su cadena de conexión le faltan los detalles de autenticación. De la documentación de Flask-SQLAlchemy, la cadena de conexión debe tener el siguiente formato

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

Por tu ejemplo, creo que se verá algo así.

 app.config['SQLALCHEMY_DATABASE_URI'] = 'mssql+pyodbc://:@:/LendApp' 

Si alguien todavía se topa con este problema y trata de encontrar otra solución, intente con pymssql lugar de pyodbc ;

pip install pymssql

La conexión URI sería:

conn_uri = "mssql+pymssql://:@/"