在 Django 中将 SQLite 更改为 PostgreSQL 会导致错误"无法将类型转换为布尔值"



我在Django中有一个使用SQLite作为数据库的项目,它运行得很好。现在我想把我的数据库从SQLite改成PostgreSQL。我更改了settings.py文件并安装了psycopg2。问题是,当我想运行python manage.py migrate时,我在CMD中出现了一个错误,上面写着:

...
django.db.utils.ProgrammingError: cannot cast type bytea to boolean
LINE 1: ...ansactionType" TYPE boolean USING "TransactionType"::boolean

在django调试模式下,浏览器显示此错误:

ProgrammingError at /home
operator does not exist: bytea = boolean
LINE 1: ...ction" WHERE ("web_transaction"."TransactionType" = true AND...

这是我在django 的型号

class Transaction(models.Model):
Amount = models.BigIntegerField()
TransactionType = models.BooleanField() 

在我的主视图中,我使用这个错误django调试模式指示的查询:

def homePage(request):
this_user=request.user

income = Transaction.objects.filter(user=this_user, TransactionType=True).aggregate(Sum('Amount'))

我不知道为什么在使用PostgreSQL时会发生这种情况,但在SQLite中运行良好。

您必须在ALTER TABLE语句中使用不同的USING子句。

根据你想要的,这可能是

... USING ("TransactionType" IS NOT NULL)

或者你可以使用一个常数:

... USING (FALSE)

我发现这个问题的原因是Django自动生成的migration文件。数据库将在Djano中基于此文件创建。我检查了数据库及其命令行接口,发现TransactionType类型是字节而不是布尔值,并在我的项目中检查了迁移文件('TransactionType', models.BinaryField())这段代码作为我的列的定义,并将其类型更改为布尔值。然后我休息我的数据库并再次迁移它,我的项目就可以正常工作了。

最新更新