py_Django的数据库操作-创新互联
数据库引擎
创新互联建站主营淮滨网站建设的网络公司,主营网站建设方案,成都App定制开发,淮滨h5微信小程序定制开发搭建,淮滨网站营销推广欢迎淮滨等地区企业咨询pymysql 取而代之 ----推荐
2的话pip install pymysql
3的话 pip3 install pymysql
安装完成后用pip3 freeze 查看一下安装的什么版本之类的
MySQLdb python3不支持,也TM很久没更新了
sudo yum install python-devel mysql-devel
MySQL-python-1.2.5,这才是python2.7.6的mysql接口
https://pypi.python.org/pypi/MySQL-python/1.2.5
import MySQLdb
mysqlclient django1.9推荐,python3.3+支持
sudo yum install python-devel mysql-devel
pip install mysqlclient
MySQL Connector/Python
$ python manage.py makemigrations polls stored as amigration. $ python manage.py sqlmigrate polls 0001 just returns their SQL $ python manage.py check # this checks for any problems in your project without making migrations or touching the database. $ python manage.py migrate apply those changes to the database. 会自动生成主键_id
python manage.py shell
基本数据访问
>>> from books.models import Publisher >>> p1 = Publisher(name='Apress', address='....) >>> p1.save() >>> publisher_list = Publisher.objects.all() >>> publisher_list [`` objects.create()`` 一步完成对象的创建与存储至数据库,就不需要save
>>> p1 = Publisher.objects.create(name='Apress', ... address='2855 Telegraph Avenue',..............添加模块的字符串表现
Publisher 对象添加一个方法 __unicode__() 。
from django.db import models class Publisher(models.Model): name = models.CharField(max_length=30) def __unicode__(self): return self.name>>> from books.models import Publisher >>> publisher_list = Publisher.objects.all() >>> publisher_list [插入和更新数据
因为 Publisher 模型有一个自动增加的主键 id ,所以第一次调用 save() 还多做了一件事: 计算这个主键的值并把它赋值给这个对象实例:
>>> p.id 52 # this will differ based on your own data接下来再调用 save() 将不会创建新的记录,而只是修改记录内容(也就是 执行 UPDATE SQL语句,而不是INSERT 语句):
>>> p.name = 'Apress Publishing' >>> p.save()注意,并不是只更新修改过的那个字段,所有的字段都会被更新。 这个操作有可能引起竞态条件
选择对象
取出所有记录:
>>> Publisher.objects.all() [数据过滤
filter()返回集合
你可以传递多个参数到 filter() 来缩小选取范围:
>>> Publisher.objects.filter(country="U.S.A.", state_province="CA") [在 name 和 contains 之间有双下划线。contains部分会被Django翻译成LIKE语句:
>>> Publisher.objects.filter(name__contains="press") [注意,SQL缺省的 = 操作符是精确匹配的
SELECT id, name, address, city, state_province, country, website FROM books_publisher WHERE name LIKE '%press%';其他的一些查找类型有:icontains(大小写无关的LIKE),startswith和endswith, 还有range(SQLBETWEEN查询)。 附录C详细描述了所有的查找类型。
获取单个对象
`` get()`` 返回单个的对象
>>> Publisher.objects.get(name="Apress")如果结果是多个对象,会导致抛出异常,如果查询没有返回结果也会抛出异常:
DoesNotExist: Publisher matching query does not exist.Publisher.DoesNotExist 在你的应用中,你可以捕获并处理这个异常,像这样:
try: p = Publisher.objects.get(name='Apress') except Publisher.DoesNotExist: print "Apress isn't in the database yet." else: print "Apress is in the database."数据排序
有序返回查询结果
如果需要以多个字段为标准进行排序(第二个字段会在第一个字段的值相同的情况下被使用到),减号 -
表示逆向排序:
Django让你可以指定模型的缺省排序方式: class Meta,内嵌类。
class Publisher(models.Model): name = models.CharField(max_length=30) def __unicode__(self): return self.name **class Meta:** **ordering = ['name']**连锁查询
“链式”的形式:
>>> Publisher.objects.filter(country="U.S.A.").order_by("-name") [限制返回的数据
取出固定数目的记录,剪语句,不支持负索引,但可逆序查询
>>> Publisher.objects.order_by('-name')[0:2]更新多个对象
更新一条记录
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')更新多条记录。
>>> Publisher.objects.all().update(country='USA') # 所有Publisher的country字段 2 # 表示受影响的记录条数注:save()方法,这个方法会更新一行里的所有列。 而某些情况下,我们只需要更新行里的某几列。
删除对象
删除数据库中的对象只需调用该对象的delete()方法即可:
>>> p = Publisher.objects.get(name="O'Reilly") >>> p.delete() >>> Publisher.objects.all() [为了预防误删除掉某一个表内的所有数据,Django要求在删除表内所有数据时显示使用all()。 否则报错
>>> Publisher.objects.delete() # 必需加all() Traceback (most recent call last): File "另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
新闻标题:py_Django的数据库操作-创新互联
浏览路径:http://ybzwz.com/article/cohjjc.html