DjangoORM使用MySQL应注意

django 默认使用sqlite3 数据库 数据都写入到这个数据库

我们可以不使用默认的sqlite 换成mysql

 

代码不用动,只要改django的setting.py 配置就可以

如图 下面配置默认是sqlite

mysql 数据库配置

注意:

'NAME' :数据库名  django不会帮你创建,要自己去mysql 上面创建数据库先

例如:设置 'NAME': db10

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'dbname',
    'USER': 'root',
    'PASSWORD': 'xxx',
    'HOST': '',
    'PORT': '',
    }
}

HOST = ip PORT =端口 password= 密码

把这份配置 替换默认 sqlite配置

# 由于Django内部连接MySQL时使用的是MySQLdb模块,而python3中还无此模块,所以需要使用pymysql来代替

  
# 如下设置放置的与project同名的配置的 __init__.py文件中
 

import pymysql
pymysql.install_as_MySQLdb() 

现在我用centos准备一台mysql服务器 利用django去连上他

mysql服务器地址192.168.0.109

上面的数据库 创建一个db1数据库

mysql> create database db1 charset=utf8;
Query OK, 1 row affected (0.13 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

 django setting配置

# DATABASES = {
#     'default': {
#         'ENGINE': 'django.db.backends.sqlite3',
#         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#     }
# }

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'db1',
    'USER': 'root',
    'PASSWORD': '123',
    'HOST': '192.168.0.109',
    'PORT': '3306',
    }
}

运行django项目

启动django后  再看数据库 db1 的表发现 多了django数据表

证明连上mysql了

mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_db1     |
+-------------------+
| django_migrations |
+-------------------+
1 row in set (0.01 sec)

然后我在cmdb项目 写上一个类 现在让django自动创建数据库表

models.py 配置

from django.db import models

# Create your models here.

# 必须继承
class UserInfo(models.Model):

    # django默认隐藏着会帮你创建 一列id列 自增的,设置为主键,参考mysql

    # 用户名列,数据类型 字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

 在项目目录执行这个命令

C:\Users\Administrator.QH-20170325TNQR\PycharmProjects\SSSSS\SS\day19\web 框架 django\s18django>python manage.py ma
kemigrations

 如果出现 no changes detected  看这帖子 

DjangoORM 执行 python manage.py makemigrations出现 no changes detected

 这个文件记录着数据库表结构数据

0001_initial.py

执行 python manage.py makemigrations 生成001_install.py

 接下来执行 python manage.py migrate

会根据刚才生成的001_install.py 生成数据库

python manage.py migrate

现在数据库已经有这个表了

C:\Users\Administrator.QH-20170325TNQR\PycharmProjects\SSSSS\SS\day19\web 框架 django\s18django>python manage.py mi
grate
Operations to perform:
  Apply all migrations: admin, auth, cmdb, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial...

再看线上mysql服务器

mysql> show tables;
+----------------------------+
| Tables_in_db1              |
+----------------------------+
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| cmdb_userinfo              |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
11 rows in set (0.00 sec)
表名叫cmdb_userinfo
from django.db import models

# Create your models here.

# 必须继承
# 表名叫cmdb_userinfo
class UserInfo(models.Model):

    # django默认隐藏着会帮你创建 一列id列 自增的,设置为主键,参考mysql

    # 用户名列,数据类型 字符串类型,指定长度
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)

总结:

生成一个临时文件

python manage.py makemigrations  

根据临时文件生成数据库表

python manage.py migrate

猜你喜欢

转载自www.cnblogs.com/mingerlcm/p/9983134.html