Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫到_sql和sqlalchemy_Python_Mysql_Pandas_Sqlalchemy - Fatal编程技术网

Python 熊猫到_sql和sqlalchemy

Python 熊猫到_sql和sqlalchemy,python,mysql,pandas,sqlalchemy,Python,Mysql,Pandas,Sqlalchemy,你需要相信我:我花了8个小时在google和stackoverflow上阅读了“熊猫数据框到mysql”的所有结果 我在mysql上有下表 mysql> select * from mytable; +------+---+---+---+------------+----------+----------+ | j | x | y | z | t | ID | value | +------+---+---+---+------------+-

你需要相信我:我花了8个小时在google和stackoverflow上阅读了“熊猫数据框到mysql”的所有结果

我在mysql上有下表

mysql> select * from mytable; 
+------+---+---+---+------------+----------+----------+
| j    | x | y | z | t          | ID       | value    |
+------+---+---+---+------------+----------+----------+
| H    | 0 | 0 | 0 |          1 | 445432   |        0 |
+------+---+---+---+------------+----------+----------+
1 row in set (0.00 sec)
类型为
[CHAR,FLOAT,FLOAT,FLOAT,INT,VARCHAR,INT]

我正试图用
to_sql
sqlalchemy
向表中写入pandas数据帧

我是这样开始的:

import pymysql
from sqlalchemy import create_engine
import sqlalchemy
我试着写和读,一切正常

cnx = create_engine('mysql://me:pswd@host/db', echo=False)
connection = cnx.raw_connection()
然后:

from sqlalchemy import text
sqlq = text('select * from mytable')
result = cnx.execute(sqlq)
for row in result:
    print row
正确返回表的内容。 而且

工作正常

cnx = create_engine('mysql://me:pswd@host/db', echo=False)
connection = cnx.raw_connection()
如果我试图通过pandas.to_mysql插入数据帧,一切都会变得疯狂

我试过这个:

test = pd.DataFrame(data = [('3', 0., 0., 0., 1, '534523', 0)])
test.columns = ['j', 'x', 'y', 'z', 't', 'ID', 'value']
以及以下各项:

cnx = create_engine('mysql://me:pswd@host/db', echo=False)
connection = cnx.raw_connection()
test.to_sql('mytable', connection)

这两者都给出了错误:

DatabaseError:对sql“从sqlite_master中选择名称,其中type='table'和name=?;”执行失败:并非所有参数都在字符串格式化过程中转换

这就产生了错误:

ValueError:j(CHAR)不是字符串
(如果我在dict中添加/删除字段,则类似)


我不知道怎么解决这个问题。我尝试使用原始连接(无光标)、引擎,我尝试将列转换为所有可能的类型,所有内容。

可能会有所帮助。我使用了Pandas read_sql,但尚未测试到_sqlI,我使用的是Pandas的最新版本(0.20.2)。但是,我尝试使用原始连接和“flavor”字段,按照建议的链接。不走运。A你是对的。我使用的是原始连接。切换到引擎,它工作了(pymysql版本)。我可以发誓在发布之前我试了100次,但都没用。谢谢豆蔻。很高兴听到我也在使用pymysql,但没有使用任何其他sql连接器。。
cnx = create_engine('mysql://me:pswd@host/db', echo=False)
connection = cnx.raw_connection()
test.to_sql('mytable', connection)
cnx = create_engine('mysql://me:pswd@host/db', echo=False)
test.to_sql('mytable', connection, dtype = {'j': sqlalchemy.sql.sqltypes.CHAR(),
                                                  'x': sqlalchemy.sql.sqltypes.FLOAT(),
                                                  'y': sqlalchemy.sql.sqltypes.FLOAT(),
                                                  'z': sqlalchemy.sql.sqltypes.FLOAT(),
                                                  't': sqlalchemy.sql.sqltypes.INT(),
                                                  'ID': sqlalchemy.sql.sqltypes.VARCHAR(),
                                                  'value': sqlalchemy.sql.sqltypes.INT()})