Python 3.x Pandas to_sql TypeError不支持的操作数类型

Python 3.x Pandas to_sql TypeError不支持的操作数类型,python-3.x,pandas,sqlalchemy,typeerror,pandas-to-sql,Python 3.x,Pandas,Sqlalchemy,Typeerror,Pandas To Sql,我正在使用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 我的数据库表是用完全相同的列名定义

我正在使用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')
这似乎应该是可行的,但是我一直得到以下类型的错误,即操作模式+“+”+名称不能支持str+int

  File "/ingest/utils.py", line 59, in copy_csv_to_temp_table
    df.to_sql(self.staging_table, db.engine, self.chunksize, 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'
文件“/inset/utils.py”,第59行,复制到临时表格
to_sql(self.staging_表,db.engine,self.chunksize,method='multi')
to_sql中的文件“/venv/lib/python3.8/site packages/pandas/core/generic.py”,第2776行
sql.to_sql(
文件“/venv/lib/python3.8/site packages/pandas/io/sql.py”,第590行,在to_sql中
pandas_sql.to_sql(
文件“/venv/lib/python3.8/site packages/pandas/io/sql.py”,第1382行,在to_sql中
table=SQLTable(
文件“/venv/lib/python3.8/site packages/pandas/io/sql.py”,第700行,在__
self.table=self.\u创建\u表格\u设置()
文件“/venv/lib/python3.8/site packages/pandas/io/sql.py”,第966行,在“创建表”设置中
返回表(self.name,meta,*列,schema=schema)
文件“”,第2行,新__
文件“/venv/lib/python3.8/site-packages/sqlalchemy/util/deprecations.py”,第139行,第1行
返回fn(*args,**kwargs)
文件“/venv/lib/python3.8/site packages/sqlalchemy/sql/schema.py”,第537行,在新的__
key=\u get\u table\u key(名称、架构)
文件“/venv/lib/python3.8/site packages/sqlalchemy/sql/schema.py”,第77行,在_get_table_key中
返回模式+“+”名称
TypeError:不支持+:“int”和“str”的操作数类型
我理解此错误的含义。但是,我不理解为什么架构或名称会导致问题,因为所有列名都是字符串。非常感谢您的帮助。

问题是:

DataFrame.to_sql(name,con,schema=None,如果_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, db.engine, chunksize=self.chunksize, method='multi')

schema
是默认为无的第三位参数,但您提供了它:
df.to_sql(self.staging_table,db.engine,self.chunksize,method='multi')
尝试将chunksize设置为命名参数:
df.to_sql(self.staging_table,db.engine,chunksize=self.chunksize,method='multi'))
-那就可以了it@JonClements你太棒了。谢谢你,这正是问题所在。再次感谢乔恩。