从 python 使用 TSQL(SQL Server 上的 mssql)时,如何为 SQLAlchemy 自动生成 ORM 代码?

Posted

技术标签:

【中文标题】从 python 使用 TSQL(SQL Server 上的 mssql)时,如何为 SQLAlchemy 自动生成 ORM 代码?【英文标题】:How can I autogenerate ORM code for SQLAlchemy when consuming TSQL (mssql on SQL Server) from python? 【发布时间】:2017-08-06 02:26:21 【问题描述】:

SQLAlchemy 依赖于我构建这样的 ORM 类:

from sqlalchemy import Column, DateTime, String, Integer, ForeignKey, func
from sqlalchemy.orm import relationship, backref
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Department(Base):
    __tablename__ = 'department'
    id = Column(Integer, primary_key=True)
    name = Column(String)

是否有工具/脚本/程序可以为我做到这一点?

例如,在 C# 中,我可以将数据项从数据库资源管理器拖放到 VisualStudio 中,并为我自动生成实体类(SQL 到 LINQ)。我正在为 python 寻找类似的东西。我在 VisualStudio 和/或 Spyder 工作。

【问题讨论】:

【参考方案1】:

我刚刚成功地使用 sqlacodegen 为我的 MS SQL Server 2014 数据库生成了类。这非常容易;一下子就爱上了!

我正在使用 Python 3.7(如果重要的话)。以下是我在(管理员?)PowerShell 中使用的命令:

    pip install sqlacodegen pip install pymssql sqlacodegen mssql+pymssql://sql_username:sql_password@server/database > db_name.py 它将在您的当前目录中创建 db_name.py。 然后您可以通过将 db_name.py 移动到与主脚本相同的文件夹并添加 import db_name 来使用这些类。

我没有指定端口,我的server 被设置为简单的计算机名称而不指定安装,即server\installation。我使用了 sqlacodegen here 的说明和来自 here 的数据库 URL。

【讨论】:

效果很好,谢谢。输出文件确实需要一分钟,所以请耐心等待。【参考方案2】:

您是否需要明确定义类,或者在不编写代码的情况下定义它们可以吗?如果后者没问题,那么 SQLAlchemy 自己的automap 可能就足够了。

否则,sqlacodegen 工具看起来应该为您生成代码。

【讨论】:

以上是关于从 python 使用 TSQL(SQL Server 上的 mssql)时,如何为 SQLAlchemy 自动生成 ORM 代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 tsql (sql 2005) 中的 utc 日期时间计算本地日期时间?

尝试从 tsql 连接到 sql-azure 时从服务器读取失败

TSQL 从动态 sql 中选择到 Temp 表

SQL/TSQL:在多个表上使用 PIVOT

区分 .sql 文件是 PL/SQL 还是 TSQL

从 TSQL 标量函数返回连接值