Django学习14-数据库相关1

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用户还需指明hostport
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 psycopg2pip install psycopg2-binary。不建议几个不同的数据库一起使用。

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

    },
    'learning_logs':{
   
  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值