新建project步骤省略,具体可参照http://5007260.blog.51cto.com/4997260/1310954
1、基础篇
cd /app && python /usr/local/bin/django-admin.py startproject shenpi #建站点 cd /app/shenpi python manage.py startapp data#data 模型需要建一个独立的app python manage.py validate #检测model.py是否存在语法错误 python manage.py sqlall data #(存放model.py app名字) python manage.py syncdb#真正建表的动作 python manage.py dbshell#这个命令将依据`` DATABASE_SERVER`` 的里设置自动检测使用哪种命令行客户端直接进入数据库会话 #module.py 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() **def __unicode__(self):** **return self.name** class Author(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=40) email = models.EmailField() **def __unicode__(self):** **return u'%s %s' % (self.first_name, self.last_name)** class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() **def __unicode__(self):** **return self.title** #查询数据 Publisher.objects.all() #取出模型中Publisher表所有数据 Publisher.objects.order_by("name")#order by 用法,字段前加-name 逆序 Publisher.objects.filter(name='Apress')#字段where name='Apress'的数据 Publisher.objects.filter(country="U.S.A.", state_province="CA")#多where条件查询 Publisher.objects.filter(name__contains="press")#contains部分会被Django翻译成LIKE语句,等价于下面sql语句 Publisher.objects.order_by('name')[0]#limit 1用法, #get/filter比较 #filter()函数返回一个记录集,这个记录集是一个列表。get()获取单个的对象 #插入数据 p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... city='Berkeley', ... state_province='CA', ... country='U.S.A.', ... website=' p.save() #更新数据 Publisher.objects.filter(id=52).update(name='Apress Publishing') Publisher.objects.all().update(country='USA') #删除数据 Publisher.objects.filter(country='USA').delete()
2、高级篇
#一个改变模型结构的步骤 首先,进入开发环境(也就是说,不是在发布环境里): 1. 在你的模型里添加字段。 2. 运行 manage.py sqlall [yourapp]来测试模型新的 CREATE TABLE语句。 注意为新字段的列定义。 3. 开启你的数据库的交互命令界面(比如, psql或mysql, 或者可以使用 manage.py dbshell)。 执行 ALTER TABLE语句来添加新列。 4. 使用Python的manage.py shell,通过导入模型和选中表单(例如, MyModel.objects.all()[:5])来验证 新的字段是否被正确的添加 ,如果一切顺利,所有的语句都不会报错。 然后在你的产品服务器上再实施一遍这些步骤。 1. 启动数据库的交互界面。 2. 执行在开发环境步骤中,第三步的ALTER TABLE语句。 3. 将新的字段加入到模型中。 如果你使用了某种版本控制工具,并且在第一步中,已经提交了你在开发环境 上的修改,现在,可以在生产环境中更新你的代码了(例如,如果你使用Subversion,执行svn update。 4. 重新启动Web server,使修改生效。 #生产环境添加/删除字段实例 ALTER TABLE books_book ADD/DROP COLUMN num_pages integer; >>> from mysite.books.models import Book #验证是否添加成功 >>> Book.objects.all()[:5] #增加额外的Manager方法 >>>增加额外的manager方法是为模块添加表级功能的首选办法。额外的manager是为了将经常使用的操作进行封装,这样我们就不必重复编码了 from django.db import models **# First, define the Manager subclass.** **class DahlBookManager(models.Manager):** **def get_query_set(self):** **return super(DahlBookManager, self).get_query_set().filter(author='Roald Dahl')** **# Then hook it into the Book model explicitly.** class Book(models.Model): title = models.CharField(max_length=100) author = models.CharField(max_length=50) # ... **objects = models.Manager() # The default manager.** **dahl_objects = DahlBookManager() # The Dahl‐specific manager.** #模型方法 >>>为了给你的对像添加一个行级功能,那就定义一个自定义方法。 有鉴于manager经常被用来用一些整表操作 (table-wide),模型方法应该只对特殊模型实例起作用。 from django.contrib.localflavor.us.models import USStateField from django.db import models class Person(models.Model): first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) state = USStateField() # Yes, this is U.S.‐centric... def is_midwestern(self): "Returns True if this person is from the Midwest." return self.state in ('IL', 'WI', 'MI', 'IN', 'OH', 'IA', 'MO') def _get_full_name(self): "Returns the person's full name." return u'%s %s' % (self.first_name, self.last_name) full_name = property(_get_full_name) #用法实例 >>> p = Person.objects.get(first_name='Barack', last_name='Obama') >>> p.is_midwestern() True >>> p.full_name # Note this isn't a method ‐‐it's treated as an attribute u'Barack Obama' #执行原始sql查询 Django数据库API带给你的也只有这么多,那你可以为你的数据库写一些自定义SQL查询。 你 可以通过导入django.db.connection对像来轻松实现,它代表当前数据库连接。 要使用它,需要通 过connection.cursor()得到一个游标对像。 然后,使用cursor.execute(sql, [params])来执行SQL语句,使 用cursor.fetchone()或者cursor.fetchall()来返回记录集, #sql查询代码不要和视图混淆,尽量放在module.py代码中 from django.db import connection def sqlSelect(sql): cursor = connection.cursor() cursor.execute(sql) return cursor.fetchall() #cursor.execute()的SQL语句中使用`` “%s”`` ,而不要在SQL内直接添加参数。 如果你使 用这项技术,数据库基础库将会自动添加引号,同时在必要的情况下转意你的参数 >>> cursor.execute("""SELECT DISTINCT first_name FROM people_person WHERE last_name = %s""", ['Lennon'])
转载于:https://blog.51cto.com/5007260/1597860