最近想要把csv档或是网络上的档案连结直接写进数据库,感觉终于到了最后一步 却翻遍
了google都解决不了问题
环境是pythob 3.6.1 ,anaconda 4.4.0
我在jupyter notebook下执行,使用pyodbc连接MySQL
资料来源是网址或是csv档,我比较习惯用pandas来处理资料
这是我连接数据库的方法
cn = pyodbc.connect("DRIVER={MySQL ODBC 8.0 ANSI Driver}; SERVER=localhost;
PORT=3306;DATABASE=db; UID=root; PASSWORD=0000;OPTION=3;CHARSET=UTF8;")
cn.setencoding(encoding='utf-8') 这行也不需要了
[解决方法]:
DRIVER 需选择 Unicode 的版本,从Python连接数据库取出资料才不会变成乱码
我不太确定在.connect下放CHARSET=UTF8; 和设定.setencoding(encoding='utf-8')有什
么不一样,但是只要少放一个,在insert into时如果有中文,jupyter notebook就会卡
住,都要shutdown kernel再重开才能继续
现在有个问题就是 我可以顺利的新增含有中文的资料到数据库了,而且在MySQL中select
出来是中文,但是到了python就会变成乱码,请问我该怎么解决?
还有个问题就是,我的资料里面有空值,我写了个循环 配合 .format,让他逐行新增资
料,但是空值读出来是nan,没办法新增
如果是数字字段的话,我可以把nan转成NULL,新增进MySQL就可以是空的,但是如果是文
字的字段,新增的时候会变成'NULL'而不是空值了
因为我用这样的形式新增资料
for i in df1.index:
cursor.execute("insert into taichung_201711 values('{}', {});" \
.format(df1.loc[i][6], df1.loc[i][7]))
如果是字串的字段,一开始就给他''了,要是把NaN改成NULL,就会变成'NULL'进数据库
有方法可以直接把空值存进MySQL吗?
这里我还是把空值都转成 'NULL'进数据库,之后调资料出来再转回nan,
目前都用DataFrame处理资料 还没发生问题
恳请各位大大指教了