django里面是怎么创建数据库表的
时间: 2024-05-15 16:17:34 浏览: 165
在 Django 中,可以通过编写模型类来定义数据库表的结构,然后通过迁移工具来创建数据库表。
具体步骤如下:
1. 编写模型类,在 models.py 文件中定义模型类,定义模型类的属性表示数据库表中的字段,例如:
```python
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.CharField(max_length=20)
price = models.FloatField()
publish_time = models.DateField()
```
2. 生成迁移文件,在命令行中执行以下命令:
```
python manage.py makemigrations
```
这个命令会检测模型类的变化,并生成一个迁移文件。
3. 执行迁移,将模型类映射为数据库表,在命令行中执行以下命令:
```
python manage.py migrate
```
这个命令会执行迁移文件中的操作,将模型类映射为数据库表。
执行完以上步骤后,就可以在数据库中看到对应的表了。
相关问题
Django重写数据库表
### 创建和修改 Django 数据库表
在 Django 中管理数据库表结构主要通过模型定义以及迁移机制来完成。
#### 初始化项目并创建应用
为了操作数据库表,首先需要有一个 Django 项目及其应用。可以通过如下命令初始化一个新的 Django 项目:
```bash
python -m django --version
django-admin startproject mysite
cd mysite
```
接着可以创建一个新应用以便于后续的操作[^1]:
```bash
python manage.py startapp books
```
#### 定义或修改模型类
对于想要重新创建或是修改现有的数据库表来说,在对应的 `models.py` 文件内调整 Python 类即可实现这一目的。比如要新增一张名为 "Book" 的表格,则可以在 `books/models.py` 添加相应的类描述[^3]:
```python
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
def __str__(self):
return self.title
```
如果已经存在该模型并且希望对其进行变更(如增加字段),只需编辑现有代码段加入所需属性:
```python
isbn = models.CharField(max_length=13, unique=True, null=True, blank=True)
```
上述改动意味着每本书籍可选关联唯一国际标准书号(ISBN),允许为空值[^2].
#### 执行 makemigrations 和 migrate 命令
一旦完成了对模型层面上的设计工作之后,就需要通知 Django 将这些变化同步到实际使用的数据库里去。这一步骤分为两部分——先生成迁移脚本(`makemigrations`)再执行它们(`migrate`)。
- **生成迁移文件**
当对模型进行了任何变动后,应该立即运行此命令以确保所有更改都被记录下来形成版本控制的一部分:
```bash
python manage.py makemigrations
```
这条指令会自动生成必要的 SQL 脚本来反映最新的数据模式改变情况,并将其保存为 `.py` 文件存放在各个应用程序下的 migrations 目录下.
- **应用迁移至数据库**
最后一步就是真正地让这些待处理的变化生效,即更新底层关系型数据库系统的架构使之与当前项目的逻辑保持一致:
```bash
python manage.py migrate
```
此时,Django 会读取之前产生的迁移文件并将其中所指示的动作逐一实施,从而达到刷新整个数据库布局的效果.
django 怎么映射外部数据库
### 配置和连接外部数据库
#### MySQL 数据库配置
对于Django项目来说,在`settings.py`文件中定义数据库设置是必要的。当使用MySQL作为外部数据库时,需确保安装了合适的Python到MySQL适配器,比如`mysqlclient`模块[^2]。
```python
import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'database_user',
'PASSWORD': 'password',
'HOST': 'localhost', # 或者 IP 地址, 如果不是本地服务器的话.
'PORT': '3306', # 默认端口号为3306.
}
}
```
为了使上述配置生效,还需注意不同版本的Django对MySQL的支持方式有所不同。例如,在Django 2.2及以上版本推荐使用`mysqlclient`模块来代替较旧的方法。
#### PostgreSQL 数据库配置
如果选择PostgreSQL,则应先通过命令行工具安装相应的Python包:
```bash
pip install psycopg2-binary
```
接着更新项目的`settings.py`如下所示[^3]:
```python
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '',
}
}
```
#### Oracle 数据库配置
针对Oracle数据库的情况,同样是在`settings.py`里调整参数以适应特定环境的需求[^5]。
```python
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.oracle',
'NAME': '192.168.1.10:1521/orclpdb1',
'USER': 'scott',
'PASSWORD': 'tiger'
}
}
```
这里需要注意的是,`NAME`字段包含了主机地址、端口和服务名的信息组合而成的一串字符串;而具体的格式取决于目标Oracle实例的实际网络位置描述。
#### Redis 和 MongoDB 的安全考虑
除了传统的关系型数据库外,有时也会涉及到NoSQL类型的存储系统如Redis或MongoDB。考虑到安全性问题,应该采取措施保护这些服务中的敏感信息不被泄露。一种常见的做法是对访问凭证进行加密处理后再存入配置文件内[^4]。
阅读全文
相关推荐















