Pandas to_sql TypeError 不支持的操作数类型

我正在使用 Pandas to_sql 进行数据库插入,以将数百万行移动到 sqlalchemy 中。我创建了一个只有 4 行的小型测试 csv,以便我确切地知道文件中的数据。

这里是csv格式

column_one,column_two,column_three,column_four
0001-1234,db38ad21b3,https://example.com,2
0034-1201,38db21adb3,https://example-two.com,3

我的数据库表是用完全相同的列名定义的。

df = pd.read_csv("test_repositories.csv",header=0,sep=',',quotechar='"',dtype={'column_one': str,'column_two': str,'column_three': str,'column_four': int},error_bad_lines=False)
df = df.where(pd.notnull(df),None)
df.to_sql(self.staging_table,db.engine,self.chunksize,method='multi')

这似乎应该可以工作,但是我不断收到以下 TypeError 说操作架构 +“。” + name 不能支持 str + int

  File "/ingest/utils.py",line 59,in copy_csv_to_temp_table
    df.to_sql(self.staging_table,method='multi')
  File "/venv/lib/python3.8/site-packages/pandas/core/generic.py",line 2776,in to_sql
    sql.to_sql(
  File "/venv/lib/python3.8/site-packages/pandas/io/sql.py",line 590,in to_sql
    pandas_sql.to_sql(
  File "/venv/lib/python3.8/site-packages/pandas/io/sql.py",line 1382,in to_sql
    table = SQLTable(
  File "/venv/lib/python3.8/site-packages/pandas/io/sql.py",line 700,in __init__
    self.table = self._create_table_setup()
  File "/venv/lib/python3.8/site-packages/pandas/io/sql.py",line 966,in _create_table_setup
    return Table(self.name,meta,*columns,schema=schema)
  File "<string>",line 2,in __new__
  File "/venv/lib/python3.8/site-packages/sqlalchemy/util/deprecations.py",line 139,in warned
    return fn(*args,**kwargs)
  File "/venv/lib/python3.8/site-packages/sqlalchemy/sql/schema.py",line 537,in __new__
    key = _get_table_key(name,schema)
  File "/venv/lib/python3.8/site-packages/sqlalchemy/sql/schema.py",line 77,in _get_table_key
    return schema + "." + name
TypeError: unsupported operand type(s) for +: 'int' and 'str'

我明白这个错误意味着什么。但是,我不明白为什么架构或名称会导致问题,因为所有列名称都是明显的字符串。任何帮助表示赞赏。

seraph59 回答:Pandas to_sql TypeError 不支持的操作数类型

function signature 是:

DataFrame.to_sql(name,con,schema=None,if_exists='fail',index=True,index_label=None,chunksize=None,dtype=None,method=None)

请注意,schema 是默认为 None 的第三个位置参数。

因此通过使用:

df.to_sql(self.staging_table,db.engine,self.chunksize,method='multi')

您认为 chunksize 被解释为 schema 参数,因此将您的 chunksize 更改为显式命名,例如:

df.to_sql(self.staging_table,chunksize=self.chunksize,method='multi')
本文链接:https://www.f2er.com/885986.html

大家都在问