数据库表的创建:
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()
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',
)
'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()
... 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()``
方法就是在此时使用的:
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()
>>> 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):移动到下一个结果集
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条.
fetchall(self):接收全部的返回结果行.
fetchmany(self,
size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self,
value,
mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一
行移动value条.