利用django的ORM可以方便的给数据库插入文章
但是假如我django放在阿里云,那我想在本地写个插件,每天很方便的插入一些数据,最好是通过ORM的,因为管理起来比较方便,会涉及到多个站,可能会有200多个站,而ORM接口就不要每次输入密码了,类似wrodpress的接口这种
如果用SQL插入,就感觉不太优雅,而且比较麻烦,每次都要链接,数据库,因为这些站很可能会分到好几个数据库里
这里补充一下吧.其实需求很简:
就是在本地的电脑上,控制远程的django,实现批量发布文章和管理文章的功能!
最好能用到django的ORM
如果没办法解决,那么如何让本地的python脚本很方便的管理远程服务器的python的脚本,可以直接操作远程脚本进行一些命令等
答案里面不少说暴露api的方式,我研究了一下,好像不太可以~
理由:
我django的models是这样设计的,里面有这些字段:
category = models.ForeignKey(Category, verbose_name=u'分类')
title = models.CharField(max_length=100, verbose_name=u'标题')
img = models.CharField(max_length=200,
default='/static/img/article/default.jpg')
tags = models.CharField(max_length=200, null=True, blank=True,
verbose_name=u'标签', help_text=u'用逗号分隔')
summary = UEditorField('摘要', height=300, width=1000,
default=u'', blank=True, imagePath="uploads/images/",
toolbars='besttome', filePath='uploads/files/')
content = UEditorField('内容', height=300, width=1000,
default=u'', blank=True, imagePath="uploads/images/",
toolbars='besttome', filePath='uploads/files/')
is_tuijian = models.BooleanField(default=False, verbose_name=u'推荐')
view_times = models.IntegerField(default=0)
zan_times = models.IntegerField(default=0)
is_top = models.BooleanField(default=False, verbose_name=u'置顶')
rank = models.IntegerField(default=0, verbose_name=u'排序')
status = models.IntegerField(default=0, choices=STATUS.items(),
verbose_name='状态')
# pub_time = models.DateTimeField(default=False,verbose_name=u'发布时间')
pub_time = models.DateTimeField(auto_now_add = True,verbose_name=u'发布时间') #博客日期
create_time = models.DateTimeField(u'创建时间', auto_now_add=True)
update_time = models.DateTimeField(u'更新时间', auto_now=True)
大家大概体验一下就可以了~就是说字段很多,而且基本都是非空字段,但是都有设置默认值!
用暴露api的方式,其实和自己写sql语句的效果差不多~:
插入的数据,每个字段都要写,比如sql语句, 你就不能只是简单的写个 title content category 这3个字段的值,而其他的django的ORM已经定义好了!
我大概举个例子大家就会明白!!!
比如如果用sql插入的话可能要构建这样一条语句:
INSERT INTO `zhangte`.`blog_article` (`id`,`title`,`img`,`summary`,`content`,`view_times`,`zan_times`,`is_top`,`rank`,`status`,`pub_time`,`create_time`,`update_time`,`category_id`,`tags`,`is_tuijian`,`is_tuijian`) VALUES ('{id}','{title}','{img}','{summary}','{content}','{view_times}','{zan_times}','{is_top}','{rank}','{status}','{pub_time}','{create_time}','{update_time}','{category_id}','{tags}','{is_tuijian}','{is_tuijian}');
暂且不说字段多,看起来杂!
而且万一我程序修改一个字段,那这个代码就不能用了!
那暴露api,其实也是一样的,比如我要post数据~那post数据,每个对应的字段都要写!
等于其实跟sql差不多的,结果可能是data 要写成这样:
data = {}
data["pk"] = pk
data["title"] = title
data["content"] = content
data["view_times"] = view_times
^^^^此处省略余下十几个字段!!!
等于说我每个字段都要定义,要不然会出现错误(因为都是非空!)
那如果有人建议,把这些字段改下可以空的话不就可以~?如果真是这样,那以后我怎么进行数据筛选?!?!!??!?
假如能用django的ORM,就很方便了
插入数据只要:
article = Article.objects.get_or_create(
pk = pk,
title = title,
content = content,
category = fenlei,
summary = summary,
)[0]
就插入一条数据了!
这样的好处:
代码简洁
我以后对程序进行修改,比如增加字段等,就非常方便,理由大家应该都懂的!
还有很多好处!我相信如果django的ORM可以解决的话,肯定比如暴露api或是直接用sql语句操作方便很多吧
Tulis operasi yang anda mahu laksanakan sebagai Perintah
Ssh untuk menyambung dan melaksanakan Perintah
Apabila menggunakan Django, anda mesti menggunakan ORMnya secara amnya.
Anda boleh mempertimbangkan untuk mendedahkan API, dan kemudian menghantar permintaan dengan parameter untuk mencapai tujuan anda. Sebagai contoh, terdapat curl di bawah Linux.
Tulis ke dalam skrip.
Nah, adalah mustahil untuk menukar satu medan untuk menjadikan semua medan tidak tersedia, kerana nama parameter tidak semestinya sama dengan nama medan pangkalan data. Bagi terlalu banyak parameter, anda boleh menetapkan nilai lalai.
Sejujurnya, ini adalah kaedah yang agak biasa...
Selain itu, kesan yang anda inginkan boleh dicapai menggunakan skrip.
Tidakkah latar belakang pengurusan pentadbir Django dapat memenuhi keperluan anda?