django和数据库相关01

第1章 Django中使用mysql数据库

1.1 安装MySQLdb支持

Mysql与Django是分开的,两个不相干的东西,于是先要下载Mysql数据库,并且安装成功;另外为了使Django能够正常连接mysq数据库还需要系统安装MySQLdb包,centos下使用yum命令 yum  -y install  MySQL-python 安装即可。为了检测安装是否成功可以通过python交互界面测试下。

>>> import MySQLdb

如果系统没有报错说明MySQldb支持安装成功。

1.2 配置django文件

在Django创建的项目路径下的setting.py文件中设置数据库的相关信息

   
   
   
   
  1. DATABASES = {  
  2.     'default': {  
  3.         'ENGINE''django.db.backends.mysql', # Add 'postgresql_psycopg2''mysql''sqlite3' or 'oracle'.  
  4.         'NAME''blog',                      # Or path to database file if using sqlite3.  
  5.         # The following settings are not used with sqlite3:  
  6.         'USER''root',  
  7.         'PASSWORD''123com',  
  8.         'HOST''127.0.0.1',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.  
  9.         'PORT''3306',                      # Set to empty string for default.  
  10.     }  

1.3 测试数据库链接是否成功测试数据库链接是否成功

  打开python,定位于该项目中的startapp应用文件夹下,执行以下代码:注意,记得使用python manage.py shell来启动shell

   
   
   
   
  1. >>> from  django.db import   connection 
  2.  
  3. >>> cursor=connection.cursor()  

如果系统没有报错则django连接mysql数据成功。

常见错误

错误信息

解决方法

You haven’t set the DATABASE_ENGINE setting yet.

不要以空字符串配置`` DATABASE_ENGINE`` 的值。 表格 5-1 列出可用的值

Environment variable DJANGO_SETTINGS_MODULE is undefined.

使用`` python manager.py shell`` 命令启动交互解释器,不要以`` python`` 命令直接启动交互解释器。

Error loading _____ module: No module named _____.

未安装合适的数据库适配器 (例如, psycopg 或 MySQLdb )。Django并不自带适配器,所以你得自己下载安装。

_____ isn’t an available database backend.

把DATABASE_ENGINE 配置成前面提到的合法的数据库引擎。也许是拼写错误?

database _____ does not exist

设置`` DATABASE_NAME`` 指向存在的数据库,或者先在数据库客户端中执行合适的`` CREATE DATABASE`` 语句创建数据库。

role _____ does not exist

设置`` DATABASE_USER`` 指向存在的用户,或者先在数据库客户端中执创建用户。

could not connect to server

查看DATABASE_HOST和DATABASE_PORT是否已正确配置,并确认数据库服务器是否已正常运行。

第2章 定义django模型

2.1 建立项目和应用

django-admin.py  startproject + “项目名称” 命令用来新建一个项目。这里我们通过django-admin.py  startproject web 建立一个名为web的项目。然后我们进入web目录下通过ls命令查看下django-admin.py  startproject 命令都创建了些什么文件。

   
   
   
   
  1. [root@localhost web]# ls  
  2.   manage.py  web 

通过ls命令查看会发现在web的目录下又创建了个以web命名的目录和一个manage.py文本文件,这里的manage.py文件主要用来。下面我们进入项目文件web的目录查看下都创建了那些文件。 

   
   
   
   
  1. [root@localhost web]# cd web/  
  2. [root@localhost web]# ls  
  3. __init__.py  __init__.pyc  settings.py  settings.pyc  urls.py  urls.pyc  wsgi.py  wsgi.pyc  

这里主要介绍2个比较关键的文件settings.py 和urls.py文件。通过名字大家很容易看出来这2个文件的作用。settings.py 文件主要用来配置项目信息的,而url.py文件这用来配置和url访问规则相关的信息,以后大家会经常用到这2个文件,这里暂时不详细介绍了。

下面我们在web目录下创建一个应用。 

   
   
   
   
  1. [root@localhost web]# pwd  
  2. /usr/local/web  
  3. [root@localhost web]# ls  
  4. blog  manage.py  web  
  5. [root@localhost web]# django-admin.py  startapp blog  
  6. [root@localhost web]# cd blog  
  7. root@localhost blog]# ls  
  8. __init__.py  __init__.pyc  models.py  models.pyc  tests.py  views.py  

通过名字我们很好识别各个文件的作用。这里关键的文件为models.py views.py这2个文件。

2.2 为应用建立模型

models.pyc文件中添加相关数据表文件

Ø 作者尊称(先生,女士),姓名,Email,头像。

Ø 出版商名称,地址,城市,省份,国家,网址。

Ø 书籍名字,出版出版日期,作者。

   
   
   
   
  1. [root@localhost blog]# ls  
  2.  
  3. __init__.py  __init__.pyc  models.py  models.pyc  tests.py  views.py  
  4.  
  5. [root@localhost blog]# more models.py  
  6. from django.db import models  
  7. from django.contrib import admin  
  8.  
  9. class Publisher(models.Model):  
  10.     name=models.CharField(max_length=30)  
  11.     address=models.CharField(max_length=50)  
  12.     city=models.CharField(max_length=60)  
  13.     state_province=models.CharField(max_length=30)  
  14.     county=models.CharField(max_length=50)  
  15.     website=models.URLField()  
  16. class Author(models.Model):  
  17.     salutation=models.CharField(max_length=10)  
  18.     first_name=models.CharField(max_length=30)  
  19.     last_name=models.CharField(max_length=40)  
  20.     email=models.EmailField()  
  21.     headshot=models.ImageField(upload_to='/tmp')  
  22. class Book(models.Model):  
  23.     title=models.CharField(max_length=100)  
  24.     authors=models.ManyToManyField(Author)  
  25.     publisher=models.ForeignKey(Publisher)  
  26.     publication_date=models.DateField() 

测试语法错误

在测试语法正确语法之前我们先把应用加入到配置文件里。vim settings.py如下图所示。红色部分为我们新加的应用,别忘记后面有个逗号。

   
   
   
   
  1. INSTALLED_APPS = (  
  2.  
  3.     'django.contrib.auth',  
  4.  
  5.     'django.contrib.contenttypes',  
  6.  
  7.     'django.contrib.sessions',  
  8.  
  9.     'django.contrib.sites',  
  10.  
  11.     'django.contrib.messages',  
  12.  
  13.     'django.contrib.staticfiles',  
  14.  
  15.     'django.contrib.admin',  
  16.  
  17.     'blog',  
  18.  
  19.     # Uncomment the next line to enable the admin:  
  20.  
  21.     # 'django.contrib.admin',  
  22.  
  23.     # Uncomment the next line to enable admin documentation:  
  24.  
  25.     # 'django.contrib.admindocs',  
  26.  
  27. )  

通过python ../manage.py  validate 命令测试模型文件是否配置正确。笔者在测试的过程中发现如下所示的错误,最后发现是因为模型文件中headshot=models.ImageField(upload_to='/tmp'),需要image模块支持,centos系统中同yum命令安装即可, yum -y install python-imaging。

   
   
   
   
  1. python ../manage.py  validate  
  2. CommandError: One or more models did not validate:  
  3. blog.author: "headshot"To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .  
  4. [root@localhost blog]#  yum -y install python-imaging  

查看生成的数据表命令

当我们在模型文件里创建好相对应的数据文件后,可以通过pyhon mangae.py sqlall 应用名称命令来查看其对应的mysql创建命令。如下图所示。

我们可以手动复制到mysql命令行里创建相应的数据表,也可以通过python manage.py syncdb命令直接创建。

测试创建的数据表 

   
   
   
   
  1. mysql> use blog;  
  2.  
  3. Reading table information for completion of table and column names  
  4.  
  5. You can turn off this feature to get a quicker startup with -A  
  6.  
  7.  
  8. Database changed  
  9.  
  10. mysql> show tables;  
  11.  
  12. +----------------------------+  
  13.  
  14. | Tables_in_blog             |  
  15.  
  16. +----------------------------+  
  17.  
  18. | auth_group                 |  
  19.  
  20. | auth_group_permissions     |  
  21.  
  22. | auth_permission            |  
  23.  
  24. | auth_user                  |  
  25.  
  26. | auth_user_groups           |  
  27.  
  28. | auth_user_user_permissions |  
  29.  
  30. | blog_author                |  
  31.  
  32. | blog_book                  |  
  33.  
  34. | blog_book_authors          |  
  35.  
  36. | blog_publisher             |  
  37.  
  38. | django_admin_log           |  
  39.  
  40. | django_content_type        |  
  41.  
  42. | django_session             |  
  43.  
  44. | django_site                |  
  45.  
  46. +----------------------------+  
  47. 14 rows in set (0.00 sec)  

通过查看我们发现,数据库中的表是以应用名字为前缀,模型文件中的类文件名为表名字的,这里的类名是忽略大小写的。下节我们讲会讲解怎么在bjango中对数据库文件进行相关操作。

你可能感兴趣的:(数据库,django)