Pyhton_Django学习笔记(五) 模型与MYSQL数据库使用
先上简单DEMO 使用MYSQL数据库显示数据
import MySQLdb
def book_list(request):
db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')
cursor = db.cursor()
cursor.execute('SELECT name FROM books ORDER BY name')
names = [row[0] for row in cursor.fetchall()]
db.close()
return render_to_response('book_list.html', {'names': names})
Django提供了在配置文件中 settings.py中配置数据库的支持。
例如:在settings.py中编辑:
DATABASES = {
'default': {
'ENGINE': 'mysql',
'NAME': 'mydb',
'USER': 'me',
'PASSWORD': 'secret',
'HOST': 'localhost',
'PORT': '',
}
}
这样在第一段代码中。可以简化成:
cursor.execute('select name from books')
names = [row[0] for row in cursor.fetchall()]
return render_to_response('book_list.html',{'name':names})
===============================================================================
下面来说下,用Django的支持做MYSQL的数据模块创建。
1、CMD项目路径下。执行:python manage.py startapp books
books是创建的模块名称,这条命令在项目下创建了一个books目录。
这个目录下包含创建生成的文件:__init__.py,models.py,tests.py,view.py
2、打开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()
完成这些代码后,激活这个模型。
3、打开settings.py 文件,定位到 INSTALLED_APPS设置节点。
先注释掉里面的自动生成对象。
并添加代码如下:
# 'django.contrib.auth',
# 'django.contrib.contenttypes',
# 'django.contrib.sessions',
# 'django.contrib.sites',
'mysite.books',
)
现在我们创建数据库表
先在CMD中验证 model文件数据是否符合标准。 执行:python manage.py validate
如果显示 0 errors found.表示语法OK。
继续执行 python mange.py sqlall books,这个命令式帮助你生成SQL脚本,你可以复制粘贴到数据库执行操作。
还有一个方法 是直接连到数据库,并执行创建表操作。命令:python manage.py syncdb
syncdb命令是同步你得模型到数据库。它根据INSTALLED_APPS里设置的APP来检查数据库,如果表不存在,就创建。
写测试方法:
p1 = Publisher(name='Apress',address='2855 Telegraph Avenue',city='Berkeley',state_province='CA',country='U.S.A',website='http://www.sina.com.cn')
p1.save()
p2 = Publisher(name='B World',address='2866 Telegraph Avenue',city='Beijing',state_province='CN',country='HK',website='http://www.qq.com')
p2.save()
pub = Publisher.objects.filter(name='Apress')
return render_to_response('book_list.html',{'name':pub})
写对应的模板页和URLS配置。
运行 效果如下
打印出的东西并没有得到我们想要的结果,先来解决这个问题。
修改 models.py 文件内容如下:
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=50)
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
再运行,输出正常。OBJECTS还有很多操作,这个找对应的文档查看更多。