[英]Error with SQL string: "Error while connecting to PostgreSQL operator does not exist: date = integer"
[英]Django error when filter by date “operator does not exist: date >= integer”
我在 postgresql 中使用 django 框架。 我有虛擬環境。 我的本地機器 Mac ,服務器在 Debian 10 上。
$ pip freeze
amqp==5.0.6
asgiref==3.4.1
billiard==3.6.4.0
celery==5.1.2
certifi==2021.5.30
chardet==4.0.0
click==7.1.2
click-didyoumean==0.0.3
click-plugins==1.1.1
click-repl==0.2.0
Django==3.2.5
django-celery-beat==2.2.1
django-celery-results==2.2.0
django-timezone-field==4.1.2
greenlet==1.1.0
idna==2.10
kombu==5.1.0
lxml==4.6.3
multitasking==0.0.9
numpy==1.21.0
pandas==1.3.0
plotly==5.1.0
prompt-toolkit==3.0.19
psycopg2==2.9.1
psycopg2-binary==2.9.1
python-crontab==2.5.1
python-dateutil==2.8.1
pytz==2021.1
requests==2.25.1
six==1.16.0
SQLAlchemy==1.4.20
sqlparse==0.4.1
tenacity==7.0.0
urllib3==1.26.6
vine==5.0.0
wcwidth==0.2.5
yfinance==0.1.60
模型.py
from django.db import models
from django.utils import timezone
class Ticker(models.Model):
symbol = models.CharField(max_length=12)
description = models.CharField(max_length=100, blank=True, default='')
avg_volume = models.DecimalField(max_digits=20, decimal_places=6)
last_close_price = models.DecimalField(max_digits=20, decimal_places=6, default=0)
last_update_date = models.DateField(default=timezone.now)
def __str__(self):
return self.symbol
class TickerData(models.Model):
date = models.DateField(default=timezone.now)
open_price = models.DecimalField(max_digits=20, decimal_places=6)
high_price = models.DecimalField(max_digits=20, decimal_places=6)
low_price = models.DecimalField(max_digits=20, decimal_places=6)
close_price = models.DecimalField(max_digits=20, decimal_places=6)
adj_close = models.DecimalField(max_digits=20, decimal_places=6)
volume = models.IntegerField()
symbol = models.ForeignKey(Ticker, on_delete=models.CASCADE, related_name='infoset')
def __str__(self):
return f'{self.symbol}: {self.date}'
視圖.py
from datetime import date, datetime, timedelta
from django.db import connection
from django.shortcuts import render, get_object_or_404
from .models import Ticker, TickerData
def ticker_data_view(request, pk):
# dates
enddate = date.today()
startdatedays = enddate - timedelta(days=180)
ticker = Ticker.objects.get(pk=pk)
ticker_info = TickerData.objects.filter(symbol=ticker).filter(date__gte=startdatedays)
context = {
'TickerData': ticker_info,
}
return render(request, 'tickerdata_list.html', context)
當我打開包含信息的頁面時
DatabaseError at /ticker/2 Execution failed on sql 'SELECT "webapp_tickerdata"."id", "webapp_tickerdata"."date", "webapp_tickerdata"."open_price", "webapp_tickerdata"."high_price", "webapp_tickerdata"."low_price", "webapp_tickerdata"."close_price", "webapp_tickerdata"."adj_close", "webapp_tickerdata"."volume", "webapp_tickerdata"."symbol_id" FROM "webapp_tickerdata" WHERE ("webapp_tickerdata"."symbol_id" = 2 AND "webapp_tickerdata"."date" >= 2021-01-09)': operator does not exist: date >= integer LINE 1: ...a"."symbol_id" = 2 AND "webapp_tickerdata"."date" >= 2021-01...
^ HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
有人可以幫忙嗎。
更新
我認為我的 postgres 在引號中等待日期,例如:
AND "webapp_tickerdata"."date" >= '2021-01-09'
我直接嘗試過,只需使用此類參數進行選擇即可。 也許我需要更改 postgress 中的設置?
我認為問題出在這一行
date = models.DateField(default=timezone.now)
您使用日期字段,但timezone.now
為您提供日期和時間 像這樣更改
import datetime
date = models.DateField(default=datetime.date.today)
或者這也是工作
date = models.DateField(default=timezone.now.date)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.