Django 对象.update_or_create

2024-04-09

我有一个在 celery 中运行的 period_task 来查询最新的加密货币价格,但由于某种原因,每次想要显示数据时,我没有得到更新的记录,我只是得到新的记录,而旧的记录由于某种原因被保留。

tasks.py

@periodic_task(run_every=(crontab(minute='*/1')), name="Update Crypto rate(s)", ignore_result=True)
def get_exchange_rate():
    api_url = "https://api.coinmarketcap.com/v1/ticker/"
    try:
        exchange_rates = requests.get(api_url).json()
        for exchange_rate in exchange_rates:
            CryptoPrices.objects.update_or_create(key=exchange_rate['id'],
                                                  symbol=exchange_rate['symbol'],
                                                  market_cap_usd=round(float(exchange_rate['market_cap_usd']), 3),
                                                  volume_usd_24h=round(float(exchange_rate['24h_volume_usd']), 3),
                                                  defaults={'value': round(float(exchange_rate['price_usd']), 3)}
                                                  )
        logger.info("Crypto exchange rate(s) updated successfully.")
    except Exception as e:
        print(e)

模型.py

class CryptoPrices(models.Model):
    key = models.CharField(max_length=255)
    value = models.CharField(max_length=255)
    symbol = models.CharField(max_length=255)
    volume_usd_24h = models.CharField(max_length=255)
    market_cap_usd = models.CharField(max_length=255)

views.py

def crypto_ticker(request):
        list_prices = CryptoPrices.objects.get_queryset().order_by('pk')
        paginator = Paginator(list_prices, 100)  # Show 100 prices per page
        page = request.GET.get('page')
        price = paginator.get_page(page)
        return render(request, 'crypto_ticker.html', {'price': price})

模板.html:

{% extends 'base.html' %}
{% load readmore %}

{% block breadcrumbs %}
    {{ block.super }} » <a href="{% url 'post_list' %}">Posts </a> »
    <a href="{% url 'crypto_ticker' %}">Crypto ticker</a>
{% endblock %}


{% block content %}

    <!DOCTYPE html>
    <html>
    <head>
        <title>Crypto ticker</title>
    </head>

    <body>
    <h1 class="center">Crypto ticker</h1>
    <hr class="hr-style">
    <div class="center">
        <h4>{{ prices }} Here you can find all frequently asked questions <br>
            if you still have still have any open points, please contact the <a href="#">support</a>.</h4>
    </div>
    <br>
    <div class="paginator">
        <span>
         {% if price.has_previous %}
            <a href="?page=1">&laquo; First <a> |</a></a>
            <a href="?page={{ price.previous_page_number }}">Previous</a>
        {% endif %}

        {% if price.has_next %}
            <span> Crypto prices - Page {{ price.number }} of {{ price.paginator.num_pages }}.</span>
            <a href="?page={{ price.next_page_number }}">Next<a> |</a></a>
            <a href="?page={{ price.paginator.num_pages }}">Last &raquo;</a>
        {% endif %}
       </span>
   </div>
    <table class="table centercontentfloat class-three-box">
        <thead>
            <tr style="font-size: small">
                <th>Ranking</th>
                <th>Symbol</th>
                <th>Name</th>
                <th>Price</th>
                <th>Market Cap (USD)</th>
                <th>24 hrs. Volume (USD)</th>
            </tr>
        </thead>
        <tbody>
        {% for price in price %}
            <tr style="font-size: small">
                <td>{{ price.id }}</td>
                <td>{{ price.symbol }}</td>
                <td>{{ price.key }}</td>
                <td>{{ price.value }} $</td>
                <td style="font-size: small">{{ price.market_cap_usd }} $</td>
                <td style="font-size: small">{{ price.volume_usd_24h }} $</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
    <div class="paginator">
        <span>
            {% if price.has_previous %}
            <a href="?page=1">&laquo; First <a> |</a></a>
            <a href="?page={{ price.previous_page_number }}">Previous</a>
        {% endif %}

        {% if price.has_next %}
            <span> Crypto prices - Page {{ price.number }} of {{ price.paginator.num_pages }}.</span>
            <a href="?page={{ price.next_page_number }}">Next<a> |</a></a>
            <a href="?page={{ price.paginator.num_pages }}">Last &raquo;</a>
        {% endif %}
       </span>
    </div>
{% endblock %}

我从 coinmarketcap api 获取的记录被保存/显示两次是否有任何值得注意的原因?

如果我浏览这些页面,我会得到这样的结果:

加密货币价格 - 第 1 页,共 21 页。最后的 ” 排名 符号 名称 价格 市值(美元) 24 小时。成交量(美元) 1 BTC 比特币 3795.6465 $ 66594617840.0 $ 8296474984.64 $ 2 ETH 以太坊 143.9996 $ 15106822040.0 $ 5043716023.22 $

在第二页上:

« 第一 |上一页 加密货币价格 - 第 2 页,共 22 页。最后的 ” 排名 符号 名称 价格 市值(美元) 24 小时。成交量(美元) 101 BTC 比特币 3798.3016 $ 66641201438.0 $ 8304474934.43 $ 102 ETH 以太坊 144.0825 $ 15115524904.0 $ 5048205218.98 $

而且我没想到BTC也在第二页,只在第一页出现过一次?!?

看起来,如果我浏览这些页面,记录不会更新,它们会在每次 period_task 运行后相继保存

亲切的问候


你误解了如何update_or_create作品。这就是docs https://docs.djangoproject.com/en/2.1/ref/models/querysets/#update-or-create say:

The update_or_create方法尝试从数据库中获取对象 基于给定的kwargs。如果找到匹配项,则会更新字段 通过在defaults字典。

So in kwargs您只传递获得匹配所需的值,而不传递更新。大概是路过id or symbol应该是唯一的kwargs你需要。所有要更新的参数都需要传递给defaults.

CryptoPrices.objects.update_or_create(
    key=exchange_rate['id'],
    symbol=exchange_rate['symbol'],
    defaults=dict(
        market_cap_usd=round(float(exchange_rate['market_cap_usd']), 3),
        volume_usd_24h=round(float(exchange_rate['24h_volume_usd']), 3),
        value= round(float(exchange_rate['price_usd']), 3))
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 对象.update_or_create 的相关文章

  • 保留完整姓氏,在 pandas 列中获取名字的首字母(如果有的话,还有中间名)

    我有一个 pandas 数据框 其中有一列表示几位网球运动员的姓氏和姓名 如下所示 Player 0 Roddick Andy 1 Federer Roger 2 Tsonga Jo Wilfred 我想保留完整的姓氏并获取姓名的首字母和中
  • Python 2.7 中的断言对我来说不起作用示例assertIn

    我的 Mac 上安装了 python 2 7 通过在终端中运行 python v 进行验证 当我尝试使用任何新的 2 7 断言方法时 我收到 AtributeError 我看过http docs python org 2 library u
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • 没有名为 StringIO 的模块

    我有Python 3 6 我想从另一个名为 run py 的 python 文件执行名为 operation py 的 python 文件 In operation py I do from cStringIO import StringI
  • 在 matplotlib 中的极坐标图上移动径向刻度标签

    From matplotlib 示例 http matplotlib org examples pylab examples polar demo html import numpy as np import seaborn as sbs
  • Gspread如何复制sheet

    在 Stackoverflow 上进行谷歌搜索和搜索后 我想我找不到有关如何复制现有工作表 现有模板工作表 并将其保存到另一个工作表中的指南 根据文档 有重复表 https gspread readthedocs io en latest
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • 用 python 编写的数学语法检查器

    我需要的只是使用 python 检查字符串是否是有效的数学表达式 为了简单起见 假设我只需要 运算符 也作为一元 带有数字和嵌套括号 为了完整性 我还添加了简单的变量名称 所以我可以这样测试 test 3 2 1 valid test 3
  • Jython 和 SAX 解析器:允许的实体不超过 64000 个?

    我做了一个简单的测试xml saxJython 中的解析器在处理大型 XML 文件 800 MB 时遇到以下错误 Traceback most recent call last File src project xmltools py li
  • 使用 Keras np_utils.to_categorical 的问题

    我正在尝试将整数的 one hot 向量数组制作为 keras 将能够使用的 one hot 向量数组来拟合我的模型 这是代码的相关部分 Y train np hstack np asarray dataframe output vecto
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • 使用“默认”环境变量启动新的子进程

    我正在编写一个构建脚本来解析依赖的共享库 及其共享库等 这些共享库在正常情况下是不存在的PATH环境变量 为了使构建过程正常工作 让编译器找到这些库 PATH已更改为包含这些库的目录 构建过程是这样的 加载器脚本 更改 PATH gt 基于
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • 混淆矩阵不支持多标签指示符

    multilabel indicator is not supported是我在尝试运行时收到的错误消息 confusion matrix y test predictions y test is a DataFrame其形状为 Horse
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练

随机推荐

  • 在新窗口中打开链接或如果已打开则将焦点移至该链接

    我有一个应该在新选项卡中打开的链接 但如果该选项卡已打开 只需切换到它即可 我尝试过使用 javascript wnd window open 和 wnd focus 它们适用于 Chrome 19 但不适用于 FF 13 或 IE 9 这
  • Pythonic 方式打印列表项

    我想知道是否有比这更好的方法来打印 Python 列表中的所有对象 myList Person Foo Person Bar print n join map str myList Foo Bar 我读这种方式不太好 myList Pers
  • mscorlib.dll 是 CLR 吗?

    如果这不是我几乎可以肯定的 那么 mscorlib dll 的作用是什么以及 CLR 位于哪里 CLR不在mscorlib dll but in MSCorEE dll 我想这就是你正在寻找的 这是加载 NET exe 程序集时加载的主 D
  • Rails form_withhidden_​​field 值对新对象进行了加密

    我有一个用于创建新模型的简单表单 该模型有一个属性panel这是在控制器中设置的 我认为这应该不重要 但是panel是一个枚举 def new order Order new panel params panel end 在视图中 我创建了
  • Windows NTFS 上的 Files.walkFileTree 与 Files.walk 性能比较

    我的应用程序 https komga org 需要定期扫描文件系统以处理文件 最初我使用的是java nio file Files walk执行扫描 但很快我就遇到了一些问题AccessDeniedException 发现 https ma
  • 如何使用 python API 列出所有数据流作业

    我的用例涉及获取项目中存在的所有流数据流作业的作业 ID 并取消它 更新我的数据流作业的源并重新运行它 我正在尝试使用 python 来实现这一点 直到现在我还没有遇到任何有用的文档 我想到使用 python 的库子进程来执行 gcloud
  • .mobileprovision 的 MIME 类型是什么

    mobileprovision 文件类型的正确 MIME 类型 IIS 是什么 我的想法正确吗 如果我必须将每个人的设备连接到 mac 开发机器来安装 mobileprovision 文件 那么它就违背了无线临时分发方法的目的 如果没有特定
  • 如何在状态栏中获得永久的应用程序通知程序?

    我在互联网上搜索了很多 但找不到正确的答案 我在 Android 手机上使用过 3G Watchdog 和 Advanced Task Killer 等应用程序 我注意到 当状态栏最小化时 它们总是有一个图标 并且还有一个无法从状态栏清除的
  • Bootstrap 模式隐藏不起作用

    Bootstrap 模式隐藏不起作用 警报来自其他地方 但我的模式没有隐藏添加了引导层 我的问题也是同样的问题
  • Google 地图 v3 地理编码服务器端

    我正在使用 ASP NET MVC 3 和 Google 地图 v3 我想在一个动作中进行地理编码 即将有效地址传递给 Google 并获取纬度和经度 我见过的所有关于地理编码的在线示例都涉及客户端地理编码 您将如何使用 C 在操作中执行此
  • 访问控制允许来源错误..(使用 cordova)

    我正在尝试网络服务器和客户端 混合应用程序 使用cordova 但是 Access Control Allow Origin 错误 所以我下载了 chrome 扩展程序 cors 但不起作用 服务器 js var app require e
  • 所有应用程序在断开连接时崩溃[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 突然之间 当我断开连接 iMac 和 iPhone 的电线时 我构建并发送到手机的任何应用程序都会立即崩溃 并且也没有任
  • 刷新物化视图时,索引是否也会自动刷新?

    我目前使用的是 Postgres 9 3 3 If you refresh物化视图 该物化视图上的索引是否也重新索引 或者是否需要手动重新索引索引 在查看以下内容时question https stackoverflow com quest
  • PHP服务器统计脚本? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我不太确定把这个问题放在哪里 它不是真正的网络应用程序或超级用户 但我确信类似的东西已经存在 我正在寻
  • 在android中使用Google Drive api获取在Google Drive上创建的文件的大小

    我创建了应用程序 使用该应用程序用户将能够从 Google 驱动器获取列表中的所有文件并能够下载它 现在 用户可以下载已上传到驱动器的文件 并带有进度计数 但我无法获取在 Goolge 驱动器上创建的文件的大小 例如文档 演示文稿 电子表格
  • Android UI 测试期间“未找到测试”

    如果我有时想通过右键单击测试然后选择运行来运行单个测试 测试结果将显示 未找到测试 并显示与 线程 main java lang NoClassDefFoundError 中的异常 相关的错误 我发现这种情况只发生过几次 为什么会发生这种情
  • C++迭代器和反向迭代器

    我正在写一个iterator 实际上是const iterator对于我当前的对象 我还想创建一个reverse const iterator also 我环顾四周 想看看如何做到这一点 然后我偶然发现this http www cplus
  • 在jsp页面中使用log4j的正确方法是什么

    我的意思是 我希望记录器名称反映 source jsp 文件 无论它是否包含在另一个文件中或编译为类或其他文件 首先 导入所需的包 即 then the jsppagename jsp根据您使用的服务器 可能会发生变化 然后 在 jsp 内
  • GZip 算法如何工作? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 GZip 文件压缩算法如何工作 如果有人有这方面的任何文档 我想阅读它 如果您仍在寻找更详细的概述 我已经在以下位置编写了 gzip de
  • Django 对象.update_or_create

    我有一个在 celery 中运行的 period task 来查询最新的加密货币价格 但由于某种原因 每次想要显示数据时 我没有得到更新的记录 我只是得到新的记录 而旧的记录由于某种原因被保留 tasks py periodic task