首页 > 解决方案 > 使用上行链接在 Anvil 中上传 csv 文件

问题描述

我有这样的错误:

TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given at <ipython-input 4-66c1c8f89515>, line 8 called from Form1, line 18

这是我在铁砧中的代码:

class Form1(Form1Template):
def __init__(self, **properties):
    # Set Form properties and Data Bindings.
    self.init_components(**properties)

  def file_loader_1_change(self, file, **event_args):
    """This method is called when a new file is loaded into this FileLoader"""
    anvil.server.call('import_csv_data',file)

jupyter notebook 中的这段代码用于将数据上传到 anvil 数据表:

import pandas as pd
import anvil.tables as tables
from anvil.tables import app_tables
import anvil.media

@anvil.server.callable
def import_csv_data(file):
  with anvil.media.TempFile(file, "r") as f:
    df = pd.read_csv(f)
    for d in df.to_dict(orient="records"):
      # d is now a dict of {columnname -> value} for this row
      # We use Python's **kwargs syntax to pass the whole dict as
      # keyword arguments
      app_tables.NilaiTukar.add_row(**d)

标签: pythonanvil

解决方案


我认为您看到的错误是因为您给出了两个参数,anvil.media.TempFile而它只是设计为接受一个。我用一个更简单的例子复制了你的错误:

import anvil.media

@anvil.server.callable
def import_csv_data(file):
  with anvil.media.TempFile(file, "r") as f:
    pass

if __name__ == "__main__":
  import_csv_data("fname.txt")

根据文档,您不需要“r”参数。你应该打电话给:

@anvil.server.callable
def import_csv_data(file):
  with anvil.media.TempFile(file) as f:
    ...

那么它应该适合你。


推荐阅读