我得到了这个Python CSV类型错误:“”是任务的无效关键字参数

dfty9e19  于 2023-04-03  发布在  Python
关注(0)|答案(1)|浏览(137)

我得到这个错误TypeError:当我要将csv文件导出到sqlite3数据库时,“”是Tasks的无效关键字参数。
我们将导入SQLAlchemy库,它是ORM Python库SQLAlchemy数据模型。
上面,declarative_base()可调用函数返回一个新的基类,所有Map的类都应该从这个基类继承。当类定义完成时,将生成一个新的Table和mapper()。

import csv

from dateutil.parser import parse
from sqlalchemy import Column, Date, Float, Integer, String, create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///tasks.sqlite3", echo=True)

Base = declarative_base()

""" Now we will define the user class """
class Tasks(Base):
    """ Table arguments other than the name, metadata, and mapped Column arguments are specified using the __table_args__ class attribute. The __table_args__ class attribute in this case will be assigned a string value.  
    
    https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/table_config.html """
    # Tasks_ID, Description, User_ID

    __tablename__ = "tasks"      # This is User class database table name attribute

    # task_id
    Tasks_ID = Column(Integer, primary_key = True)        # This the primary key attribute

    # description
    Description = Column(String(30))

    # User_ID
    User_ID = Column(Integer)

    # Sprint_ID
    Sprint_ID = Column(Integer)

    # Team_ID
    Team_ID = Column(Integer)

    # Story_Points
    Story_Points = Column(Integer, nullable=True)

    Current_State = Column(String(30))

    # Sprint_ID , Team_ID, Story_Points, Current_State 

Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)

def parse_none(dt):
    """Trys to parse a string date and returns None if unable to."""
    try:
        return parse(dt)
    except:
        return None

def prepare_listing(row):
    """Takes a row from CSV file and returns a Listing object from it."""

    row["Story_Points"] = parse_none(row["Story_Points"])
    return Tasks(**row)

# You May Find The CSV File At This Link Below:
# https://raw.githubusercontent.com/Born2Student/Tasks/main/new_tasks.csv

with open("new_tasks.csv", encoding="utf-8", newline="") as csv_file:
    csvreader = csv.DictReader(csv_file, quotechar='"')

    listings = [prepare_listing(row) for row in csvreader]

    session = Session()
    session.add_all(listings)
    session.commit()
TypeError                                 Traceback (most recent call last)
/Users/shawnyang/Downloads/test/test2.ipynb Cell 1 in <cell line: 85>()
     85 with open("new_tasks.csv", encoding="utf-8", newline="") as csv_file:
     86     csvreader = csv.DictReader(csv_file, quotechar='"')
---> 88     listings = [prepare_listing(row) for row in csvreader]
     90     session = Session()
     91     session.add_all(listings)

/Users/shawnyang/Downloads/test/test2.ipynb Cell 1 in <listcomp>(.0)
     85 with open("new_tasks.csv", encoding="utf-8", newline="") as csv_file:
     86     csvreader = csv.DictReader(csv_file, quotechar='"')
---> 88     listings = [prepare_listing(row) for row in csvreader]
     90     session = Session()
     91     session.add_all(listings)

/Users/shawnyang/Downloads/test/test2.ipynb Cell 1 in prepare_listing(row)
     78 """Takes a row from CSV file and returns a Listing object from it."""
     80 row["Story_Points"] = parse_none(row["Story_Points"])
---> 81 return Tasks(**row)

File <string>:4, in __init__(self, **kwargs)

File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/sqlalchemy/orm/state.py:481, in InstanceState._initialize_instance(*mixed, **kwargs)
    479     return manager.original_init(*mixed[1:], **kwargs)
...
   1164             "%r is an invalid keyword argument for %s" % (k, cls_.__name__)
   1165         )
   1166     setattr(self, k, kwargs[k])

TypeError: '' is an invalid keyword argument for Tasks
lvjbypge

lvjbypge1#

问题输出:

2022-08-30 09:57:26,270 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2022-08-30 09:57:26,270 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("tasks")
2022-08-30 09:57:26,271 INFO sqlalchemy.engine.Engine [raw sql] ()
2022-08-30 09:57:26,271 INFO sqlalchemy.engine.Engine PRAGMA temp.table_info("tasks")
2022-08-30 09:57:26,271 INFO sqlalchemy.engine.Engine [raw sql] ()
2022-08-30 09:57:26,272 INFO sqlalchemy.engine.Engine 
CREATE TABLE tasks (
    "Tasks_ID" INTEGER NOT NULL, 
    "Description" VARCHAR(30), 
    "User_ID" INTEGER, 
    "Sprint_ID" INTEGER, 
    "Team_ID" INTEGER, 
    "Story_Points" INTEGER, 
    "Current_State" VARCHAR(30), 
    PRIMARY KEY ("Tasks_ID")
)

2022-08-30 09:57:26,272 INFO sqlalchemy.engine.Engine [no key 0.00020s] ()
2022-08-30 09:57:26,273 INFO sqlalchemy.engine.Engine COMMIT
{'': '0', 'Tasks_ID': '0', 'Description': 'Itself most affect rise after product tend eat also individual behavior author professor toward base hot alone seven school president significant.', 'User_ID': '114', 'Sprint_ID': '1', 'Team_ID': '8', 'Story_Points': datetime.datetime(2022, 8, 13, 0, 0), 'Current_State': 'draft'}

TypeError                                 Traceback (most recent call last)
/Users/shawnyang/Downloads/test/test2.ipynb Cell 1 in <cell line: 86>()
     86 with open("new_tasks.csv", encoding="utf-8", newline="") as csv_file:
     87     csvreader = csv.DictReader(csv_file, quotechar='"')
---> 89     listings = [prepare_listing(row) for row in csvreader]
     91     session = Session()
     92     session.add_all(listings)

/Users/shawnyang/Downloads/test/test2.ipynb Cell 1 in <listcomp>(.0)
     86 with open("new_tasks.csv", encoding="utf-8", newline="") as csv_file:
     87     csvreader = csv.DictReader(csv_file, quotechar='"')
---> 89     listings = [prepare_listing(row) for row in csvreader]
     91     session = Session()
     92     session.add_all(listings)

/Users/shawnyang/Downloads/test/test2.ipynb Cell 1 in prepare_listing(row)
     80 row["Story_Points"] = parse_none(row["Story_Points"])
     81 print(row)
---> 82 return Tasks(**row)

File <string>:4, in __init__(self, **kwargs)

File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/sqlalchemy/orm/state.py:481, in InstanceState._initialize_instance(*mixed, **kwargs)
    479     return manager.original_init(*mixed[1:], **kwargs)
...
   1164             "%r is an invalid keyword argument for %s" % (k, cls_.__name__)
   1165         )
   1166     setattr(self, k, kwargs[k])

TypeError: '' is an invalid keyword argument for Tasks

大家好,我已经设法解决了这个问题。感谢您的帮助。
问题是CSV文件的索引列,它有一个空的列名,以''的形式给出错误。我所要做的就是通过将index = False设置为csv文件来删除索引列。

相关问题