解决django使用sqlite3的外键约束没作用

时间:2022-02-05 05:25:58

首先,在models中创建2张表

class Business(models.Model):
caption = models.CharField(max_length=32)

class Host2(models.Model):
nid = models.AutoField(primary_key=True)
hostname = models.CharField(max_length=32,db_index=True)
ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
port = models.IntegerField()
b = models.ForeignKey(to="Business", to_field='id')

business表解决django使用sqlite3的外键约束没作用

然后在views中给host2添加一张表

def app(request):    obj2 = models.Host2.objects.create(nid=9,hostname='d1',ip="1.1.1.1",port=22,b_id=40)    return HttpResponse('ok1')

如果,你默认将表创建在sqlite3中,那么你执行http://127.0.0.1:8000/app ,也会在host2中添加记录成功。查资料据说是sqlite的版本问题,要升级版本?

于是我试了下django将表创建在mysql中,执行http://127.0.0.1:8000/app,就不能创建了,有了约束作用。

解决django使用sqlite3的外键约束没作用

好了,问题解决了,那以后就用mysql作为存储了。

python3的django配置。

在settings中将DATABASES替换掉。需要注意的是‘NAME’代指mysql中的database,需要你在自己手动先创建好

DATABASES = {    'default': {    'ENGINE': 'django.db.backends.mysql',    'NAME':'mysqldb',    'USER': 'root',    'PASSWORD': '×××',    'HOST': '[host_id]',    'PORT': '3306',    }}

还有要在你的django的同名目录下的__init__.py文件中加上,因为py3用的都是pymysql了。2的换成mysqldb

import pymysqlpymysql.install_as_MySQLdb()