我在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())
这段代码作为我的列的定义,并将其类型更改为布尔值。然后我休息我的数据库并再次迁移它,我的项目就可以正常工作了。