创建表时出现Python sqlalchemy错误
我正在尝试获取一个创建表时出现Python sqlalchemy错误,python,mysql,pandas,dataframe,sqlalchemy,Python,Mysql,Pandas,Dataframe,Sqlalchemy,我正在尝试获取一个.csv文件,过滤一些列,并使用新过滤的df创建一个新的MySQL表 问题是我在.csv中有一个特定的值,它具有不同的字符集,如下所示('\ufeffY'): 在那之后,我创建了一个新的df,并用重命名的列进行过滤。我正在尝试将这些值标准化。首先,我将删除不需要的空格,然后将其转换为小写(理论上,.CSV文件中此列的值应该只有“y”或“n”) 然后,我尝试设置为“?”任何与“y”或“n”不同的值,我相信这将修复原始df中的'\ufeffY'值 df2.loc[~df2['sup
.csv
文件,过滤一些列,并使用新过滤的df创建一个新的MySQL表
问题是我在.csv
中有一个特定的值,它具有不同的字符集,如下所示('\ufeffY'
):
在那之后,我创建了一个新的df
,并用重命名的列进行过滤。我正在尝试将这些值标准化。首先,我将删除不需要的空格,然后将其转换为小写(理论上,.CSV文件中此列的值应该只有“y”或“n”)
然后,我尝试设置为“?”
任何与“y”或“n”不同的值,我相信这将修复原始df中的'\ufeffY'
值
df2.loc[~df2['supported'].isin(['y', 'n']), 'supported'] = '?'
如果在执行上述操作后选中df2['supported'].unique()
,则得到以下结果:
array(['y', '?'], dtype=object)
我假设'?'
可能是我试图摆脱的'\ufeffY'
值,然后我尝试使用df2
和sqlalchemy
创建一个新表,方法如下:
df2.to_sql('ServersList', engine, index=False, if_exists='replace',
dtype={'supported': sqlalchemy.types.Text,
'server_name': sqlalchemy.types.Text,
'owner': sqlalchemy.types.Text,
'critical': sqlalchemy.types.Text,
'business_function': sqlalchemy.types.Text,
'IP': sqlalchemy.types.Text,
'activated': sqlalchemy.types.DateTime(),
'service_type': sqlalchemy.types.Text,
'platform': sqlalchemy.types.Text,
'OS': sqlalchemy.types.Text,
'classification': sqlalchemy.types.Text,
'support_team': sqlalchemy.types.Text,
'virtual_server': sqlalchemy.types.Text,
'host_name': sqlalchemy.types.Text,
'location': sqlalchemy.types.Text,
'log': sqlalchemy.types.DateTime()}
)
这就是我得到以下错误的时候:
UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 10: character maps to <undefined>
UnicodeEncodeError:“charmap”编解码器无法对位置10中的字符“\ufeff”进行编码:字符映射到
这条信息非常清楚,但我认为df2将不再具有该值,因此它应该可以工作
显然,我在这里遗漏了一些东西。好吧,最后修复的是在.read_csv()函数调用期间添加enconding='utf-8',以防万一,我也将DB更改为utf8格式,默认情况下它被创建为utf8mb4好吧,最后,修复了在.read_csv()函数调用期间添加enconding='utf-8',以防我也将DB更改为utf8格式,默认情况下,它创建为utf8mb4,看起来像是数据库和机器默认编码之间的编码问题。也许下面的资源是有用的?谢谢亚科夫,的确如此。我必须在.read\u csv()调用中使用encoding='utf-8',并且我还将DB更改为utf8。我认为通过创建一个新的df并用“?”替换该值可以避免这种情况,但可以肯定的是,我在那里做了一些错误的事情。感谢您的回复。看起来您的数据库和计算机的默认编码之间存在编码问题。也许下面的资源是有用的?谢谢亚科夫,的确如此。我必须在.read\u csv()调用中使用encoding='utf-8',并且我还将DB更改为utf8。我认为通过创建一个新的df并用“?”替换该值可以避免这种情况,但可以肯定的是,我在那里做了一些错误的事情。我感谢你的答复。
df2.to_sql('ServersList', engine, index=False, if_exists='replace',
dtype={'supported': sqlalchemy.types.Text,
'server_name': sqlalchemy.types.Text,
'owner': sqlalchemy.types.Text,
'critical': sqlalchemy.types.Text,
'business_function': sqlalchemy.types.Text,
'IP': sqlalchemy.types.Text,
'activated': sqlalchemy.types.DateTime(),
'service_type': sqlalchemy.types.Text,
'platform': sqlalchemy.types.Text,
'OS': sqlalchemy.types.Text,
'classification': sqlalchemy.types.Text,
'support_team': sqlalchemy.types.Text,
'virtual_server': sqlalchemy.types.Text,
'host_name': sqlalchemy.types.Text,
'location': sqlalchemy.types.Text,
'log': sqlalchemy.types.DateTime()}
)
UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 10: character maps to <undefined>