利用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语句操作方便很多吧
구현하고 싶은 작업을 Command로 작성
Ssh 접속 및 명령 실행
Django를 사용할 때는 일반적으로 ORM을 사용해야 합니다.
API 노출을 고려한 다음 매개변수와 함께 요청을 보내 목적을 완료할 수 있습니다. 예를 들어 Linux에는 컬이 있습니다.
스크립트로 작성해 보세요.
매개변수 이름이 반드시 데이터베이스 필드 이름과 동일할 필요는 없기 때문에 하나의 필드를 변경하여 모든 필드를 사용할 수 없게 만드는 것은 불가능합니다. 매개변수가 너무 많으면 기본값을 설정할 수 있습니다.
솔직히 이 방법은 비교적 흔한 방법인데...
게다가 스크립트를 이용하면 원하는 효과를 얻을 수도 있습니다.
Django 관리자 관리 배경이 귀하의 요구를 충족할 수 없습니까?