最近在学习salAlchemy,在过程中希望找到一种机制,能够根据已存在的数据库的表结构(不同的库,表的数量和结构存在差异),自动去调整类和类中列的信息,包括字段之间的关系。虽然最终没有解决,但是找到了一个基于SqlAlchemy的小工具,sqlacodegen。根据官网上的解释,它是一个为SqlAlchemy制作的,能够自动生成模型代码的generator。它也是用来代替sqlautocode这个工具,它们功能相似,但是由于后者对于Python 3和SqlAlchemy新版本的支持问题,以及一些bug,被前者取代。
这个工具的特点:
(1)支持SqlAlchemy 0.6-1.0版本;
(2)所产生的代码为declarative形式(一种将列的声明和映射写在一起的形式,SqlAlchemy中常见),几乎跟手写 的没有差别;
(3)按照PEP 8标准编码;
(4)准确的定义关系,包括多对多,一对一;
(5)自动的探测到联系在一起的表和继承
(6)出色的范围测试(不太明白)
工具下载:
https://pypi.python.org/pypi/sqlacodegen/
在Python3.4中,自带了pip工具,Python2.X的版本用户可以自己下一个。
(1)如果有网络可以用,并且已经安装了pip工具,那么找到对应路径,命令行 -pip install sqlacodegen。
(2)在获取了.whl文件后,用-pip install 文件名.whl同样可以实现安装。
这里要说明的是,在用方式(2)进行安装时,sqlacodegen依赖一个叫inflect的包,需要自行下载后,才能安装sqlacodegen,方法(1)中pip工具会帮用户搞定。
在这里分享一个链接,里面几乎囊括了所有Python要用到的库,http://www.lfd.uci.edu/~gohlke/pythonlibs/
安装完毕后,在命令行中 -sqlacodegen --help
会看到如下图所示的结果,根据不同的数据库厂商和help中的提示,就可以对某个库或者某张表进行逆向生成模型了。下面是不同数据厂商的链接例子。链接信息可以参考,sqlAlchemy中create_engine()方法中参数。
sqlacodegen postgresql:///some_local_db sqlacodegen mysql+oursql://user:password@localhost/dbname sqlacodegen sqlite:///database.db