在链接服务器上创建表的flask sqlalchemy表对象



我正在用Microsoft SQL数据库服务器创建一个小烧瓶网站。web服务器在linux机器上,我通过odbc连接到数据库->pyodbc;烧瓶sqlalchemy。

from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.engine import URL
connection_url = URL.create(
"mssql+pyodbc",
username="user",
password="password",
host="192.168.0.128",
port=1433,
database="Print",
query={"driver": "ODBC Driver 17 for SQL Server"})
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
app.config['SQLALCHEMY_DATABASE_URI'] = connection_url
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

现有的本地数据库表连接起来没有问题。

class Print(db.Model):
__tablename__ = 'Printers'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(24))
def __repr__(self):
return '<Name %r>' % self.name

但是,当我试图从链接服务器访问表时,查询在翻译中的某个地方被破坏了。

class Collo(db.Model):
__tablename__ = 'collo'
__table_args__ = {'schema': 'sprod..sdba'}
type = db.Column(db.String(8), primary_key=True)
description = db.Column(db.String(30))
def __repr__(self):
return '<collo %r>' % self.description

错误:

sqlalchemy.exc.ProgrammingError: (pyodbc.ProgrammingError) ('42S02', "[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'sprod..sdba.collo'. (208) (SQLExecDirectW)")
[SQL: SELECT TOP 1 [sprod.].sdba.collo.type AS sprod__sdba_collo_type, [sprod.].sdba.collo.description AS sprod__sdba_collo_description
FROM [sprod.].sdba.collo
WHERE [sprod.].sdba.collo.type = ?]
[parameters: ('GOOT2',)]

在sql management studio下,查询为:select * from [SPROD]..[sdba].[collo]

在pyodbc中选择:cursor.execute("select * from sprod..sdba.collo where type = 'GOOT2'" )工作良好。

如何防止烧瓶sqlalchemy中包含方括号?

这是SQLAlchemy和SQL Server的一个已知问题"链接服务器";正如本期GitHub中所讨论的。当前的解决方法是在本地服务器上为链接服务器上的表创建一个SYNONYM,如这里所述,例如

CREATE SYNONYM [dbo].[hello_199] FOR [DOCKER199].[myDb].[dbo].[hello]

相关内容

  • 没有找到相关文章

最新更新