小编viv*_*ill的帖子

使用python请求下载CSV

这是我的代码:

import csv
import requests
with requests.Session() as s:
    s.post(url, data=payload)
    download = s.get('url that directly download a csv report')
Run Code Online (Sandbox Code Playgroud)

这使我可以访问csv文件.我尝试了不同的方法来处理下载:

这将在一个字符串中提供csv文件:

print download.content
Run Code Online (Sandbox Code Playgroud)

这将打印第一行并返回错误:_csv.Error:在未加引号的字段中看到的换行符

cr = csv.reader(download, dialect=csv.excel_tab)
for row in cr:
    print row
Run Code Online (Sandbox Code Playgroud)

这将在每一行中打印一个字母,它不会打印整个内容:

cr = csv.reader(download.content, dialect=csv.excel_tab)
for row in cr:
    print row
Run Code Online (Sandbox Code Playgroud)

我的问题是在这种情况下读取csv文件的最有效方法是什么.以及如何下载实际的csv文件.

谢谢

python csv python-requests

36
推荐指数
6
解决办法
6万
查看次数

Django,两个注释结果之间的划分将无法正确计算

我试图在queryset中的两个注释结果之间进行划分.印象比点击大得多,所以我应该得到十分之一小数.

def get_queryset(self):
        return googleData.objects.filter(account=self.account_name).\
            values('date').\
            annotate(Sum('click'), Sum('impression'), Sum('converted_click'),
                     Sum('conversion_value'), Sum('cost'), Sum('conversion_value'), ctr_monthly= Sum('click')/Sum('impression')).\
            order_by('-date')
Run Code Online (Sandbox Code Playgroud)

麻烦在这里:

ctr_monthly= Sum('click')/Sum('impression'))
Run Code Online (Sandbox Code Playgroud)

在模板中我有:

<td>{{ googleData.ctr_monthly | floatformat:2}} </td>
Run Code Online (Sandbox Code Playgroud)

结果是0.00.如果我执行ctr_final = click*impression,它会正确生成.Click&Impression都是整数字段.

我试过使用float(),给了我一个语法错误.

另一个问题是:制作像这样的查询集的最佳实践什么?有什么方法可以将它分解为几段简短的代码并使其更整洁可读?

谢谢〜

python django floating-point annotate

9
推荐指数
1
解决办法
5668
查看次数

Django方法不允许(POST)

在视图中:

def article_add(request):
    print request.user, " is adding an article"
    if request.method == "POST":
        web_url = request.POST['web_url']
        Uploadarticle(web_url)
        return redirect('myapp:index')
Run Code Online (Sandbox Code Playgroud)

在html中:

<form class="navbar-form navbar-right" role="form" method="post" action="{% url 'myapp:article_add' %}" enctype="multipart/form-data">
{% csrf_token %}
    <div class="form-group">
        <div class="col-sm-10">
        <input id="article_url" name="web_url" type="text">
        </div>
   </div>
   <button type="submit" class="btn btn-default"> + </button>
</form>
Run Code Online (Sandbox Code Playgroud)

在url.py中:

app_name = 'myapp'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^$', views.article_add, name='article_add'),
]
Run Code Online (Sandbox Code Playgroud)

我在这里尝试做的是通过html传递url值来查看,调用函数上传数据库,将用户重定向到刷新的同一主页,然后新添加的项目将显示.

不知怎的,每次我提交我都有一个空白页面,在终端我得到一个错误说:

Method Not Allowed (POST): /
"POST / HTTP/1.1" 405 0
Run Code Online (Sandbox Code Playgroud)

forms django post

9
推荐指数
1
解决办法
2万
查看次数

MYSQL 左连接函数结果缺少行

我有两张桌子。A 带有物料,(库存主清单) B 带有物料、日期和销售额(销售表)

我有:

cursor.execute(
    "SELECT A.item, sum(B.qty) \
    FROM A \
    LEFT JOIN sales on A.item = B.item \
    WHERE B.date BETWEEN %s AND %s\
    GROUP BY A.item", (gr2014start, gr2014end))
Run Code Online (Sandbox Code Playgroud)

这并没有列出 A 中的所有项目我知道在选定的日期范围内,A 中的某些项目在 B 上没有任何销售,因此它不存在。有没有办法可以使用 join 函数将它们列为零?

我有这个:

cursor.execute("SELECT A.item, \
    (SELECT COALESCE(sum(qty),0) From B \
    WHERE (A.item = B.item) \
    AND (B.date BETWEEN %s AND %s)) as 'Qty' \
    FROM A", (gr2014start, gr2014end))
Run Code Online (Sandbox Code Playgroud)

这有效。但不知何故,这个非常慢(比顶部的不完整连接函数慢 3 或 4 倍)

谢谢你。

mysql left-join

1
推荐指数
1
解决办法
1999
查看次数