我得到这个错误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
1条答案
按热度按时间lvjbypge1#
问题输出:
大家好,我已经设法解决了这个问题。感谢您的帮助。
问题是CSV文件的索引列,它有一个空的列名,以''的形式给出错误。我所要做的就是通过将index = False设置为csv文件来删除索引列。