Django学习14-数据库相关1

  • Post author:
  • Post category:其他




Django数据库支持

Django支持连接多种数据库,除了默认的SQLite外,还包括MySQL、PostgreSQL和Oracle这些关系型数据库。

##注意事项



持久链接



setting

中设置

CONN_MAX_AGE

参数可以设置数据库连接保持的时间(秒),默认为0:每次请求(request)后关闭与数据库的链接;设置为None时:无限制的持续连接。



连接管理

Django在首次进行数据库查询时会打开与数据库的连接。它保持此连接打开并在后续请求中重用它。 Django一旦超过CONN_MAX_AGE定义的最时间或者不再可用,就会关闭连接。

在每个请求开始时,如果连接达到其最大时间,Django就会关闭连接。如果要设置数据库在一段时间后终止空闲连接,则应将CONN_MAX_AGE设置为一个较低的值,以便Django不会尝试使用已被数据库服务器终止的连接。 (此问题可能只会影响非常低流量的网站。)

在每个请求结束时,Django会关闭那些连接时间达到max_age或者处于不可恢复的错误状态的连接。如果在处理请求时发生任何数据库错误,Django会检查连接是否仍然有效,如果没有则关闭它。因此,数据库错误最多只影响一个请求;如果连接变得不可用,则下一个请求将获得新连接。



警告

由于每个线程都维护自己的连接,因此数据库必须支持至少与工作线程一样多的连接。

有时候,大多数视图都不会访问数据库,例如,因为它是外部系统的数据库,或者使用了缓存机制。这种情况下,需要将CONN_MAX_AGE设置为低值甚至为0,因为维护不太可能被重用的连接没有意义。这将有助于保持同时与数据库进行连接的数量。

开发服务器为它处理的每个请求创建一个新线程,会影响持久连接。在开发过程中不要启用它们。

当Django建立与数据库的连接时,它会根据所使用的后端设置适当的参数。如果启用持久连接,则不会再对每个请求重复此设置。如果修改连接的隔离级别或时区等参数,则应在每个请求结束时恢复Django的默认设置,在每个请求开始时强制使用适当的值,或者禁用持久连接。



编码

Django会默认所有的数据库都使用

utf-8

编码,如果使用了其他编码方式可能会导致意料之外的错误。



Django多数据库联用

大多数情况下,Django只需要使用一个数据库。但也可以指定同时使用多个数据库。



连接MySQL数据库

先试使用MySQL数据库代替默认的SQLite数据库,确保安装了MySQL。

  • 下载

    pymysql

    库:

    pip install pymsql

  • 在管理目录下的__init__.py中添加:
import pymysql
pymysql.install_as_MySQLdb()

让Django将pymysql当做MySQLdb使用

  • 修改setting下的

    DATABASE

    设置,填写MySQL的用户、密码和要使用的数据库,使用非

    root

    用户还需指明

    host



    port
DATABASES = {
   
    'default': {
   
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'ex1',
        'USER': password.dbuser,
        'PASSWORD': password.mysql_passwd,
        'HOST':'localhost',
        'PORT':'3306',
    },
    # 'default': {
   
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # },
  • 执行

    migrate

    命令
(venv) ulysses@ulysses:~/PycharmProjects/django_ulysses$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, djcelery, learning_logs, sessions, sites, users
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK

MySQL数据库中就会有数据表。

在这里插入图片描述



使用PostgreSQL

需要安装psycopg2:

pip install psycopg2



pip install psycopg2-binary

。不建议几个不同的数据库一起使用。

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

    },
    'learning_logs':{
   
        'ENGINE':'django.db.backends.mysql',



版权声明:本文为qq_19268039原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。