Python 中文字符插入问题

Python 中文字符插入问题,python,pandas,azure,pypyodbc,Python,Pandas,Azure,Pypyodbc,我有以下熊猫数据框 需要使用汉字将所有值插入数据仓库,但汉字被视为垃圾(????)(百å¨è‹±åšï¼ˆèˆŸå±±ï¼‰å•¤é…’有é™å…¬å¸ )像上面一样 插入查询是动态准备的。 我需要有关如何处理以下情况的帮助: 以UTF-8格式读取文件,并使用字符集UTF-8使用pyodbc连接将其写入数据仓库 df=pd.read_csv(filename,dtype='str',encoding='UTF-8') cnxn = database_connect() ##Connec

我有以下熊猫数据框

需要使用汉字将所有值插入数据仓库,但汉字被视为垃圾(????)(百å¨è‹±åšï¼ˆèˆŸå±±ï¼‰å•¤é…’有é™å…¬å¸ )像上面一样 插入查询是动态准备的。 我需要有关如何处理以下情况的帮助:

以UTF-8格式读取文件,并使用字符集UTF-8使用pyodbc连接将其写入数据仓库

df=pd.read_csv(filename,dtype='str',encoding='UTF-8')
cnxn = database_connect() ##Connect to database##
cnxn.setencoding(ctype=pyodbc.SQL_CHAR, encoding='UTF-8')
cnxn.autocommit = True
cursor = cnxn.cursor()
for y in range(len(df)):
 inst='insert into '+tablename+' values ('
 for x in range(len(clm)):
  if str(df.iloc[y,x])=='nan':
   df.iloc[y,x]=''
  if x!=len(clm)-1:
   inst_val=inst_val+"'"+str(df.iloc[y,x]).strip().replace("'",'')+"'"+","
  else:
   inst_val=inst_val+"'"+str(df.iloc[y,x]).strip().replace("'",'')+"'"+")"
 inst=inst+inst_val #########prepare insert statment from values inside in-memory data###########
 inst_val=''
 print("Inserting value into table")
 try:
  cursor.execute(inst) ##########Execute insert statement##############
  print("1 row inserted")
 except Exception as e:
  print (inst)
  print (e)
应该将相同的like值插入sql数据仓库中

您使用动态sql来构造包含汉字的字符串文本,但您将它们作为

插入到tablename值('你好')
当SQL Server要求Unicode字符串文字的格式为

插入到tablename值中(N'你好')
最好使用适当的参数化查询来避免此类问题:

sql=“插入到表名值(?)
参数=('你好',)
cursor.execute(sql,params)

您是否已经检查过,使用pandas读取数据后,数据的外观如何?显示是否正确?您确定,数据源是UTF8吗?亚洲语言中的AFAIK通常使用其他编码,如UTF-16,因为每个字符(除了常用的阿拉伯数字和空格等字符)需要不止一个字节,所以UTF-8并不是这类语言的完美代表,UTF-16或更高版本会更好匹配。也许你可以验证它确实是UTF-8,因为如果它是UTF-16或更高版本,它可以解释为什么会出现这种字符混乱。是的,我在加载到数据帧后打印了它的中文字符,i tri使用UTF-16进行编辑,但在加载到SQL server时出现了错误抱歉,我想我帮不了你。如果使用
UTF-8
读取字符后字符显示正确,我猜它确实是
UTF-8
。你可能只能检查将SQL脚本的一部分写入文件并在SQL server上运行时会发生什么情况其他工具。如果这也不起作用(有BOM和没有BOM),我会认为SQL Server中存在错误。但如果它起作用,可能是数据库连接设置有问题(或pyodbc中存在错误)。好的,让我检查一下,然后回来,谢谢你的回答。完全一样,我已经解决了谢谢你的回答:)