设为首页 收藏本站
查看: 1966|回复: 0

[经验分享] Python django学习之:model (与数据库操作)

[复制链接]

尚未签到

发表于 2018-8-5 09:19:07 | 显示全部楼层 |阅读模式
  1. 建立app
  在自己的工程项目目录下输入:
  python manage.py startapp myapp(你想建立的app名称)
  建立一个叫myapp的app
  这样,在你的工程项目目录下会出现一个叫myapp的目录
  2. 创建Model
  在app目录下进入models.py
  输入类似下面的代码:
class Publisher(models.Model):  
name = models.CharField(max_length=30)
  
address = models.CharField(max_length=50)
  
city = models.CharField(max_length=60)
  
state_province = models.CharField(max_length=30)
  
country = models.CharField(max_length=50)
  
website = models.URLField()
  
class Author(models.Model):
  
first_name = models.CharField(max_length=30)
  
last_name = models.CharField(max_length=40)
  
email = models.EmailField()
  
class Book(models.Model):
  
title = models.CharField(max_length=100)
  
authors = models.ManyToManyField(Author)
  
publisher = models.ForeignKey(Publisher)
  
publication_date = models.DateField()
  上面的每个class相当于一个新的table
  例外是Many to Many 关系

  (注:The exception to the one-class-per-database-table rule is the case ofmany-to-many>  django会自动给每个model配置一个名为id的primary key

  (Finally, note we haven’t explicitly defined a primary key in any of thesemodels. Unless you instruct it otherwise, Django automatically gives everymodel an auto-incrementing integer primary key field called>  3. 安装model
  在最初的配置文件settings.py中找到
INSTALLED_APPS  加入自己的app名称,比如'myapp'
  用下面的命令验证model的有效性:
python manage.py validate  如果一切正常,你会看到 0errorsfound 消息。如果出错,请检查你输入的模型代码。 错误输出会给出非常有用的错误信息来帮助你修正你的模型。一旦你觉得你的模型可能有问题,运行 pythonmanage.pyvalidate 。 它可以帮助你捕获一些常见的模型定义错误。
  4. (真正在DB创建我们设定好的table)create table:
  在shell中输入
python manage.py sqlall myapp(步骤1中你创建的app名称)  然后你就可以看见各种SQL语句了,嗯,看上去不错。但是……坑爹的是“sqlall 命令并没有在数据库中真正创建数据表,只是把SQL语句段打印出来,这样你可以看到Django究竟会做些什么。”
  所以说下面这个才是真正建表的语句:
python manage.py syncdb  之后你应该能看到诸如:
  Creating tables ...
  Creating table books_publisher
  Creating table books_author
  Creating table books_book_authors
  Creating table books_book
  Installing custom SQL ...
  Installing indexes ...
  Installed 0 object(s) from 0 fixture(s)
  这样的信息
  值得注意的是,syncdb 命令是同步你的模型到数据库的一个简单方法。 它会根据 INSTALLED_APPS 里设置的app来检查数据库, 如果表不存在,它就会创建它。 需要注意的是, syncdb 并 不能将模型的修改或删除同步到数据库;如果你修改或删除了一个模型,并想把它提交到数据库,syncdb并不会做出任何处理。
  5. (插入一个新的对象) insert:
>>> from books.models import Publisher  
>>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',
  
...     city='Berkeley', state_province='CA', country='U.S.A.',
  
...     website='http://www.apress.com/')
  
>>> p1.save()
  查看:
  >>> publisher_list = Publisher.objects.all()
  >>> publisher_list
  6. 额外问题:为model加入字符串表现形式
  在每个model里加入:
def __unicode__(self):  
return self.name
  return 处写上你想要的字符串
  7. (选择对象)select:
Publisher.objects.all()  ——相当于 select from
Publisher.objects.filter(name='Apress')  ——相当于 select from ... where name = 'Apress'
Publisher.objects.filter(name__contains="press")  ——相当于 select from ... where name LIKE '%press%';
  以上方法,返回的都是一个list (其实是query set)
  想直接获取单个对象?用get 方法!
  Publisher.objects.get(name="Apress")
  8.  (对结果排序) order:
  Publisher.objects.order_by("name")
  ——相当于 select from ...  ORDER BY name;
  多项排序:
Publisher.objects.order_by("state_province", "address")  逆向排序:
Publisher.objects.order_by("-name")  连锁查询:
Publisher.objects.filter(country="U.S.A.").order_by("-name")  9. (更新对象)update:
  1)使用save()方法:
>>> p = Publisher.objects.get(name='Apress')  
>>> p.name = 'Apress Publishing'
  
>>> p.save()
  ——相当于
UPDATE books_publisher SET  
name = 'Apress Publishing',
  
address = '2855 Telegraph Ave.',
  
city = 'Berkeley',
  
state_province = 'CA',
  
country = 'U.S.A.',
  
website = 'http://www.apress.com'

  
WHERE>  !!所有的列都被更新了!这也太naive了吧!
  2)用update() 方法才比较好:
Publisher.objects.filter(id=52).update(name='Apress Publishing')  ——相当于
UPDATE books_publisher  
SET name = 'Apress Publishing'

  
WHERE>  可以对多行同时进行更新:
Publisher.objects.all().update(country='USA')  update()方法会返回一个整型数值,表示受影响的记录条数
  10. (删除对象)delete:
  调用该对象的delete()方法即可:
  p = Publisher.objects.get(name="O'Reilly")
  p.delete()
  一旦使用all()方法,所有数据将会被删除:
  Publisher.objects.all().delete()
  参考:http://www.djangobook.com/en/2.0/chapter05.html
  http://djangobook.py3k.cn/2.0/chapter05/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-546788-1-1.html 上篇帖子: Python文件操作IO open 读-取-写 下篇帖子: Linux (ubuntu 12.04)下搭建Python Django环境
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表