【问题标题】:SQLALchemy - cannot reflect a SQL Server DB running on Amazon RDSSQLALchemy - 无法反映在 Amazon RDS 上运行的 SQL Server 数据库
【发布时间】:2017-09-13 09:22:32
【问题描述】:

我的代码很简单:

app = Flask(__name__)
app.config.from_object('config')

db = SQLAlchemy(app)
db.metadata.reflect()

而且它不会抛出任何错误。但是,当我在此反射后检查元数据时,它返回一个空的 immutabledict 对象。

我的连接字符串中的参数是 100% 正确的,并且代码适用于非 RDS 数据库。

seems to happen to others as well 但我找不到解决方案。

另外,我尝试使用 metadata.reflect 函数中的“only”参数将反射限制为特定表,这是我得到的错误:

sqlalchemy.exc.InvalidRequestError: Could not reflect: requested table(s) not available in mssql+pyodbc://{connection_string}: (users)

【问题讨论】:

    标签: sql-server sqlalchemy flask-sqlalchemy amazon-rds


    【解决方案1】:

    我已经修好了。 SQLAlchemy 类的 reflect() 方法有一个名为“schema”的参数。在我的情况下,将此参数设置为“dbo”即可解决。

    我正在使用 Flask-SQLAlchemy,它的 reflect() 方法中没有上述参数。您可以关注this post 以访问该参数和其他参数,例如“仅”。

    【讨论】:

      【解决方案2】:

      在没有提供架构名称的情况下调用反射时会发生此错误。例如,这将导致错误发生:

      metadata.reflect(only = [tableName])
      

      需要更新它以使用您尝试反映的表的架构,如下所示:

      metadata.reflect(schema=schemaName, only = [tableName])
      

      【讨论】:

        【解决方案3】:

        您必须在反射参数中设置 schema='dbo'。

        db.Model.metadata.reflect(bind=engine, schema='dbo', only=['User'])
        

        然后创建你的表模型:

        class User(db.Model):
            __table__ = Base.metadata.tables['dbo.User']
        

        并访问该表中的数据:

        【讨论】:

          猜你喜欢
          • 2015-02-10
          • 1970-01-01
          • 1970-01-01
          • 2015-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-18
          • 1970-01-01
          相关资源
          最近更新 更多