当前位置: 首页 > 面试题库 >

Connect to MSSQL Database using Flask-SQLAlchemy

章宏恺
2023-03-14
问题内容

我正在尝试通过SQLAlchemy连接到本地MSSQL数据库。
以下是我的\uu init\uuuuy文件的代码摘录:

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

下面是在我的型号.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()

This is resulting in the following error:

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

我唯一能想到的就是我的数据库连接字符串不正确。我试着把它改成更标准的Pyodbc连接
字符串和includingdriver={sqlserver}但不占上风。如果有人能帮我解决这个问题,我将不胜感激。
谢谢


问题答案:

所以我遇到了一个非常类似的问题,通过做
跟随。
遵循[SQL炼金术]
[文件](http://docs.sqlalchemy.org/en/latest/dialogs/mssql.html#模块-
sqlalchemy.dialones.mssql语言.pyodbc)我发现我可以使用我的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

This then caused an additional error because I was also using Flask-Migrate
and apparently it doesn’t like % in the connection URI. So I did some more
digging and found this post.
I then changed the following line in my ./migrations/env.py file

From:

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

To:

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)

在做了所有这些之后,我能够进行迁移,一切看起来都像
它现在工作正常。



 类似资料:
  • 问题内容: 我想使用SQLAlchemy设置general_log和general_log_file变量,有没有办法做到这一点?我一直在Google搜索,找不到关于该主题的任何内容。 问题答案: 您可以执行所需的任何原始SQL查询(当然,您必须在会话中获得适当的权限)。要更改变量,请运行以下命令:

  • 问题内容: 我正在寻找使用sqlalchemy执行此查询。 我只想要喜欢(薰衣草和扁豆汤)或(黑胡萝卜汁)的孩子。另外,这可能是大量喜欢的颜色和食物的列表(可能> 10K),因此,我想分批进行。 这是相似的,但并不能完全理解: Sqlalchemy in子句 问题答案: 您需要构造:

  • 问题内容: 是否有“ Pythonic”方式(我的意思是,没有“ pure SQL”查询)来使用SQLAlchemy定义SQL视图? 问题答案: 更新: 又见SQLAlchemy的使用配方这里 据我所知,开箱即用不支持创建(只读非实例化)视图。但是在SQLAlchemy 0.7中添加此功能非常简单(类似于我在此处给出的示例)。您只需要编写一个编译器扩展即可 。使用此扩展名,您可以编写(假设这是一个

  • 问题内容: 我想连接到需要ca-cert的MySQL数据库。我可以使用MySQLdb做到这一点,如下所示: 在SQLAlchemy或SQLObject中,我该怎么做? 谢谢彼得 问题答案: SQLAlchemy中的create_engine()具有一个参数: –选项字典,它将作为附加关键字参数直接传递到DBAPI的方法。

  • 问题内容: 这是我要运行的示例代码: 有没有一种方法可以运行此方法而又不会从MySQL收到“ Too many connections”错误?我已经知道我可以以其他方式处理连接或拥有连接池。我只想了解如何正确关闭sqlalchemy的连接。提前致谢! 问题答案: 这是正确编写该代码的方法: 也就是说,是连接 工厂 和连接 池 ,而不是连接本身。当您说时,连接将 返回到Engine内的连接池 ,而实

  • 问题内容: 我已有一个包含约50个表的mysql数据库。 除了为每个表手动编写声明式SqlAlchemy类(如此处所示)外,还有没有我可以针对mysql数据库运行的工具/脚本/命令,它将为数据库中的每个表 生成 声明式样式的python类? 仅以一张表为例(理想情况下将为所有50张表生成),如下所示: 是否有工具/脚本/命令可以生成包含以下内容的文本文件: 问题答案: 使用sqlautocode:

  • 问题内容: 我使用MySQL将JSON作为blob /文本存储在列中。有没有简单的方法可以使用python / SQLAlchemy将其转换为字典? 问题答案: 您可以使用SQLAlchemy 轻松创建自己的类型 对于SQLAlchemy版本> = 0.7,请在下面查看Yogesh的答案 在定义表时可以使用它(示例使用elixir): 您还可以使用其他json序列化程序进行jsonpickle。

  • 问题内容: 如果不存在,如何配置Flask / SQLAlchemy创建一个新的数据库连接? 我有一个不常使用SQLAlchemy的Python / Flask服务器。它每两天都会被访问一次,并且在第一次访问时经常会引发“ MySQL服务器已消失”错误。后续的页面浏览量很好,但是出现此初始错误看起来并不专业。 我想知道正确的处理方式-像“做一个很长的时间”这样的建议,在这种情况下大约需要4天,似乎