我正在使用 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'
我明白这个错误意味着什么。但是,我不明白为什么架构或名称会导致问题,因为所有列名称都是明显的字符串。任何帮助表示赞赏。