惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
Google Online Security Blog
Google Online Security Blog
月光博客
月光博客
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
M
MIT News - Artificial intelligence
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
The Cloudflare Blog
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
G
Google Developers Blog
罗磊的独立博客
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
A
About on SuperTechFans
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
GbyAI
GbyAI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
The Register - Security
The Register - Security
U
Unit 42
D
Docker
Martin Fowler
Martin Fowler
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
博客园_首页
Google DeepMind News
Google DeepMind News

博客园 - verygis

C++/CLI 本地字符串和托管字符串之间的转换 DWF Toolkit on Microsoft Windows Visual studio 2017 c++ wcout 无法输出中文 Javascript 技巧集(1) win10 下 gulp-sass 无法使用的解决 VS2010 下 将 EntityFramework 的版本从 4.0 升级到 5.0 [原]CentOS 6.5 上安装 MySQL 5.6 Filezilla 适用于 Win2003 和 WinXP 的版本 Bower 自定义组件文件夹名称 [原]JQuery mobile CSS 文件组织 [转]mysql在windows下支持表名大小写,lower_case_table_names [转]Installing python 2.7 on centos 6.3. Follow this sequence exactly for centos machine only [转]理解android.intent.category.LAUNCHER 具体作用 [转]如何判断某版本的.NET Framework是否安装 [转]Convert Windows TCHAR argv list to classical char * argv Google V8 源码下载及构建环境 关于网络字节序(network byte order)和主机字节序(host byte order) 宏 UNUSED_PARAM 的作用 [转]在C#中使用IDL文件,IDL是个接口定义文件
[转]Django与遗留系统和数据库集成
verygis · 2014-07-19 · via 博客园 - verygis

From:http://www.czug.org/python/django/17.html

尽管Django最适合从零开始开发项目--所谓的"绿色领域"开发--将框架与遗留系统和数据库集成是可能的,本章解释一些 
集成策略 

与遗留数据库集成 
Django的数据库层从Python代码生成SQL schemas--但是对于遗留数据库,你已经拥有SQL schemas,这种情况下你需要为你 
已经存在的数据库表写模型(由于性能的原因,Django的数据库层不支持通过运行时自省数据库的不工作的对象-关系映射, 
为了使用数据库API,你需要写模型代码),幸运的是,Django带有通过阅读你的数据库表规划来生成模型代码的辅助工具 
该辅助工具称为manage.py inspectdb 

使用inspectdb 
inspectdb辅助工具检查你的settings文件指向的数据库,决定你表示你的表的Django模型并打印Python模型代码到标准输出 
这里是典型的从零开始的遗留数据库处理的过程,唯一的前提是Django已经安装并且你有一个遗留数据库 
1,通过运行django-admin.py startproject mysite(这里mysite是你的项目名)创建Django项目,我们将在例子中使用mysit 
e作为项目名 
2,在项目中编辑settings文件mysite/settings.py来告诉Django你的数据库连接参数是什么以及数据库名是什么,特别的, 
你将想指定DATABASE_NAME,DATABASE_ENGINE,DATABASE_USER,DATABASE_PASSWORD,DATABASE_HOST和DATABASE_PROT设置 
3,通过运行python mysite/manage.py startapp myapp(这里myapp是你的app名)来在你的项目中创建Django app,我们这里 
将使用myapp作为项目名 
4,运行命令python mysite/manage.py inspectdb,这将检查DATABASE_NAME数据库中的表并为每个表打印模型类,看看输出 
来了解inspectdb可以做什么事情 
5,在你的app里通过使用标注shell输出重定向保存输出到models.py文件: 
python mysite/manage.py inspectdb > mysite/myapp/models.py 
6,编辑mysite/myapp/models.py文件,整理生成的模型并且做你需要的自定义,我们将在下一节对此给出一些提示 

整理生成的模型 
你可能料想到了,数据库省查不是完美的,你将需要做一些轻量的结果模型代码的整理,这里是处理生成的模型的一些指示: 
1,每个数据库表都被转换为一个模型类--即,在数据库表和模型类之间有一个一对一映射,这意味着你将需要对任何多对多 
链接表重整模型为ManyToManyField对象 
2,每个生成的模型对每个域有一个属性--包括id主键域,尽管如此,如果模型没有主键,调用它Django会自动添加id主键域 
这样,如果你非常肛门,你将像删除任何像这样的行,因为它们是冗余的: 
id = models.IntegerField(primary_key=True) 
3,每个域的类型(如CharField,DateField)通过查看数据库列类型(如VARCHAR,DATE)来决定,如果inspectdb不能映射一个 
列的类型到模型域,它将使用TextField并在生成的模型中该域附近插入Python注释"该域类型是猜的",当心它,如果需要则 
对应的改变域类型 
4,如果数据库列名是Python保留字(如pass,class或者for),inspectdb将添加'_field'到属性名,例如,如果一个表有一 
个列for,生成的模型将有一个域for_field,db_column属性设置为'for'.inspectdb将插入Python注释'域被重命名因为它是 
Python保留字'到域附近 
5,如果你的数据库包含引用到其它表的表(大部分数据库这样做),你可能需要重新安排生成的模型的顺序来使引用其它模型 
的模型正确的排序,例如,模型Foo有一个ForeignKey到模型Bar,则模型Bar应该在模型Foo之前定义 
6,inspectdb为PostgreSQL,MySQL和SQLite检测主键,即它在合适的地方插入primary_key=True,对于其它数据库,你将需 
要在每个模型中为至少一个域插入primary_key=True,因为Django模型需要有一个primary=True的域 
7,外键检测只与PostgreSQL和某些类型的MySQL表工作,其他情况下,外键域将生成为IntegerField(假设外键列为INT列)