前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3 初学实践案例(9)sqlacodegen 根据已有数据库生成 ORM 使用的 model.py

Python3 初学实践案例(9)sqlacodegen 根据已有数据库生成 ORM 使用的 model.py

作者头像
FungLeo
发布2019-05-27 11:35:57
1.7K0
发布2019-05-27 11:35:57
举报

版权声明:本文为 FengCms FungLeo 原创文章,允许转载,但转载必须注明出处并附带首发链接 https://cloud.tencent.com/developer/article/1436514

Python3 初学实践案例(9)sqlacodegen 根据已有数据库生成 ORM 使用的 model.py

前面我们在连接数据库的时候,我们使用的是 sql 语句来实现的。但是组织 sql 语句是一个比较困难的事情,因此,我们可以使用 ORM 库将数据库变成一个类,然后通过操作这个类来实现对数据库的操作。

所以我打算学习 sqlalchemy 这个 ORM 库。但是发现,自己来书写这个类是非常困难的。主要是很多语法都不知道如何来写。

但是我想,这样重复性的工作,一定有工具可以实现。于是我找到了 sqlacodegen 这个工具,这个工具,可以将已有的数据库生成为 ORM 使用的 model.py 文件。

安装与使用 sqlacodegen 工具

安装特别简单:

代码语言:javascript
复制
pip install sqlacodegen

安装完成后,我们运行

代码语言:javascript
复制
sqlacodegen --version

就可以输出它的版本号了。当然,我们可以通过 -h 参数来查看帮助信息,具体如下:

代码语言:javascript
复制
$ sqlacodegen --help
usage: sqlacodegen [-h] [--version] [--schema SCHEMA] [--tables TABLES]
                   [--noviews] [--noindexes] [--noconstraints] [--nojoined]
                   [--noinflect] [--noclasses] [--outfile OUTFILE]
                   [url]

Generates SQLAlchemy model code from an existing database.

positional arguments:
  url                SQLAlchemy url to the database

optional arguments:
  -h, --help         show this help message and exit
  --version          print the version number and exit
  --schema SCHEMA    load tables from an alternate schema
  --tables TABLES    tables to process (comma-separated, default: all)
  --noviews          ignore views
  --noindexes        ignore indexes
  --noconstraints    ignore constraints
  --nojoined         don't autodetect joined table inheritance
  --noinflect        don't try to convert tables names to singular form
  --noclasses        don't generate classes, only tables
  --outfile OUTFILE  file to write output to (default: stdout)

好像参数很多的样子,但是很好理解,不要视图,不要索引以及其他的。

最重要的参数就是 [url] 这个是数据库连接语句。

比如我连接我前面生成的那个保存密码的数据库,就可以用下面的语句:

代码语言:javascript
复制
sqlacodegen sqlite:///passwd.db

然后就可以在终端内输出响应的模型文件的代码了。

我们当然需要保存到文件当中,可以通过两个命令来实现。

代码语言:javascript
复制
// 第一种是使用系统命令
sqlacodegen sqlite:///passwd.db > model.py
// 第二种是使用工具自带功能
sqlacodegen --outfile y.py sqlite:///passwd.db

其他人写的文章一定是告诉你使用工具自带功能的命令,但是你看,还是系统命令更加简洁吧~关键是这个工具没有参数缩写,差评~

sqlacodegen 工具的输出结果

我的那个保存密码的数据库的输出结果如下:

代码语言:javascript
复制
# coding: utf-8
from sqlalchemy import Column, DateTime, Integer, String, Table, text
from sqlalchemy.sql.sqltypes import NullType
from sqlalchemy.ext.declarative import declarative_base


Base = declarative_base()
metadata = Base.metadata


class Passwd(Base):
    __tablename__ = 'passwd'

    id = Column(Integer, primary_key=True)
    name = Column(String(255))
    password = Column(String(255))
    time = Column(DateTime, server_default=text("current_timestamp"))

t_sqlite_sequence = Table(
    'sqlite_sequence', metadata,
    Column('name', NullType),
    Column('seq', NullType)
)

嘿嘿,要引用什么样的库,以及各种标准写法,全部在里面了,真好呀~太方便啦!

如果是一个比较大型的数据库,使用这个工具就实在是太方便了。

不过目前对于我来说,最关键的问题还是,赶紧去看 sqlalchemy 文档~

本文由 FungLeo 原创,允许转载,但转载必须保留首发链接。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年12月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Python3 初学实践案例(9)sqlacodegen 根据已有数据库生成 ORM 使用的 model.py
    • 安装与使用 sqlacodegen 工具
      • sqlacodegen 工具的输出结果
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档