使用[Django]来利用现有的数据库的方法
关于这篇文章
这是一份有关如何使用Django连接已有数据库的方法备忘录。
假设情景是使用Django开发现有系统的管理工具。
参考:将传统的数据库与Django整合的公式。
可以在Django中使用的数据库
Django 支持的数据库服务器包括官方支持的 PostgresSQL、MySQL、Oracle,以及非官方支持的 SQL Server。尽管涵盖了主要数据库,但需要注意其版本限制。
- Django公式:利用可能なデータベース
Django 2.1 版本的时候
需要注意的事项
由于Django的启动需要一些管理表(表名以auth或django开头),所以不能完全使用现有的数据库。为了让Django使用的连接用户能够创建表并执行迁移,需要给予其创建表的权限。
在迁移时,Django生成的表数量大约有十几个。如果在管理方面有所担心,可以事先创建一个Django模式(schema),并确保表在该模式下进行创建。对于现有系统的表,可以提前创建别名并分配最低限度的权限,以确保安全性。
在Django中,没有主键的表或者主键是复合键的表是不能使用的。
工作内容
连接到数据库
首先,使用pip工具安装连接到各个数据库所需的库。
如果使用SQLServer,您还需要在操作系统上安装ODBC驱动程序。
※ 也有适用于Linux的ODBC驱动程序。参考:Linux使用ODBC连接到SQL Server。
然后,修改settings.py中的DATABASES。
- Django 公式:データベース接続設定の書き方
以下是对”postgres”的中文释义:
PostgreSQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
需要进行SQLServer ODBC设置。
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'mydb',
'USER': 'user@myserver',
'PASSWORD': 'password',
'HOST': 'myserver.database.windows.net',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
},
}
可以通过管理命令manage.py dbshell来确定设置是否成功。
使用inspectdb命令来查找模型定义的代码。
Django提供了用于读取现有表格并创建模型定义的管理命令。
usage: manage.py inspectdb [-h] [--database DATABASE] [--include-views]
[--version] [-v {0,1,2,3}] [--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback]
[--no-color]
[table [table ...]]
我們將在models.py中定義此處輸出的程式碼。
class SampleItem(models.Model):
id = models.IntegerField(primary_key=True) # AutoField?
name = models.CharField(max_length=15)
class Meta:
managed = False
db_table = 'sample'
如果要在进行数据添加的表格上进行操作,需要将id的定义从IntegerField更改为AutoField。
class Meta: 在下面进行以下配置。
managed = False: migrationsの管理対象外とする
db_table = ‘sample’: テーブル名を明示
参考:のぶ实验室。在Django中使用现有的数据库。
3. 迁移
一旦模型定义完成,就执行迁移操作。这将在目标数据库中创建Django的管理表。
请通过manage.py shell执行既存表的模型名.objects.first()等命令来访问现有表的数据进行确认。
应该可以毫无问题地使用manage.py runserver命令启动应用程序。