Django:数据库表的建立与增删查改(ForeignKey和ManytoMany)

数据库表的创建:

1、Django工程项目建立,基础环境调试。

2、创建表
from django.db import models

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)#定义外键的时候,在创建该表时,数据库自动的会增加_id在其名字后面,即publisher_id
    publication_date = models.DateField()
3、告诉整个项目,激活该model.py文件,在项目setting.py中进行激活:
INSTALLED_APPS = (
    'app.books',
)
4、在shell中验证model代码的正确性,验证无误后,执行代码,将其转换为sql语言:
python manage.py validate
python manage.py sqlall books
validate 命令检查你的模型的语法和逻辑是否正确。 如果一切正常,你会看到 0 errors found 消息。
5、同步到数据库中,syncdb仅仅创建数据库里还没有的表,它 并不 对你数据模型的修改进行同步,也不处理数据模型的删除
python manage.py syncdb
python manage.py migrate
 
数据库的增删查改:
1、插入记录
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.objects.filter(id=52).update(name='Apress Publishing')
save()每次都更新所有列,update()则每次更新指定列
2、关键字查询
Publisher.objects.filter(name='Apress')
上面的例子中``
filter()`` 函数返回一个记录集,这个记录集是一个列表。 相对列表来说,有些时候我们更需要获取单个的对象, `` get()``
方法就是在此时使用的:
Publisher.objects.get(name="Apress")
3、数据集合排序
>>>Publisher.objects.order_by("name")
>>> Publisher.objects.order_by("-name") #倒序
4、删除记录
Publisher.objects.filter(country='USA').delete()
执行数据库的SQL命令
1.导入django.db的connection模块,建立与数据库的链接,在之前一定要在settings.py上设置好数据库,并且执行
python manage.py syncdb同步数据库
>>> from django.db import connection
>>> cursor=connection.cursor()
如果不在django框架下,连接数据库的操作为:

import MySQLdb conn=MySQLdb.connect(host="localhost",user="root",passwd="123",db="mydatabase")

cursor=conn.cursor()

2.设置SQL命令:

>>> cursor.execute("""
... SELECT DISTINCT first_name
... FROM books_author
... WHERE last_name = %s""",['miao'])

3.执行命令:

>>> row = cursor.fetchone()

cursor对象用拥有的方法如下:

cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
 
cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self,
size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self,
value,
mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一
行移动value条.

posted on 2016-03-24 14:32  cwm_kylin  阅读(2613)  评论(0编辑  收藏  举报

导航