当前位置: 首页 > 面试题库 >

使用SQLAlchemy,to_sql用熊猫写入MySQL数据库

糜俊彦
2023-03-14
问题内容

试图使用python将pandas数据框写入MySQL表to_sql。以前一直在使用flavor='mysql',但是将来会贬值,并希望开始过渡到使用SQLAlchemy引擎。

样例代码:

import pandas as pd
import mysql.connector
from sqlalchemy import create_engine

engine = create_engine('mysql+mysqlconnector://[user]:[pass]@[host]:[port]/[schema]', echo=False)
cnx = engine.raw_connection()
data = pd.read_sql('SELECT * FROM sample_table', cnx)
data.to_sql(name='sample_table2', con=cnx, if_exists = 'append', index=False)

读取工作正常,但to_sql存在错误:

DatabaseError:在SQL’SELECT name FROM sqlite_master WHERE type =’table’AND
name = ?;’上执行失败:在字符串格式化期间参数数目错误

为什么看起来要使用sqlite?sqlalchemy与mysql特别是mysql.connector的正确用法是什么?

我也尝试将引擎作为连接传递,这给了我一个错误,该错误没有引用任何游标对象。

data.to_sql(name='sample_table2', con=engine, if_exists = 'append', index=False)
>>AttributeError: 'Engine' object has no attribute 'cursor'

问题答案:

使用引擎代替raw_connection()工作引擎:

import pandas as pd
import mysql.connector
from sqlalchemy import create_engine

engine = create_engine('mysql+mysqlconnector://[user]:[pass]@[host]:[port]/[schema]', echo=False)
data.to_sql(name='sample_table2', con=engine, if_exists = 'append', index=False)

不清楚为什么我昨天尝试这样做时会给我更早的错误。



 类似资料:
  • 我试图导出我的数据帧到sql数据库(Postgres)。 我创建了如下表: 我想把这个数据框写到sql表中: 但是,当我运行命令写入数据库时,我意识到已经创建了一个新表"OUTPUT",其中插入了数据。 如何避免在表中插入双引号?

  • 问题内容: 我用来将数据框导出到mysql中。但是,我发现具有长字符串内容(例如url)的列被截断为63位数字。导出时,我从ipython笔记本收到以下警告: /usr/local/lib/python2.7/site- packages/pandas/io/sql.py:248:警告:第3行cur.executemany(insert_query,data)的列’url’的数据被截断了 对于不同

  • 问题内容: 我正在编写一个脚本,以将带有标头的大.xlsx文件减少到一个csv中,然后根据标头名称仅写有所需列的新csv文件。 我得到的错误是最后一部分代码,它说 我确定我忽略了一些愚蠢的事情,但是我已经阅读了熊猫网站上的to_csv文档,但我仍然感到茫然。我知道我使用了不正确的to_csv参数,但我似乎无法理解我猜的文档。 任何帮助表示赞赏,谢谢! 问题答案: 选择特定列的方法是这样的-

  • 我正试图在模式下将写入文件格式(在最新的pandas版本0.21.0中引入)。但是,文件将被新数据覆盖,而不是附加到现有文件。我错过了什么? 写入语法是 读取语法是

  • 问题内容: 我正在加载一个包含浮点和字符串数据混合的txt文件。我想将它们存储在可以访问每个元素的数组中。现在我正在做 这是输入文件的结构:。 现在,数据将作为唯一列导入。我如何划分它,以便分别存储不同的元素(所以我可以调用)?以及如何定义标题? 问题答案: 您可以使用: 添加您的代码,在引号之间留一个空格。因此,熊猫可以检测值之间的空格并按列排序。数据列用于命名您的列。

  • 问题内容: 我正在使用to_csv将Multiindex DataFrame写入csv文件。csv文件的一列包含元组中的多索引,例如: 但是,我希望能够将Multiindex输出到两列而不是一列的元组,例如: 看起来可以为列实现此目的,但对于行则没有这样的选择。有没有办法做到这一点? 问题答案: 我认为这可以做到 使用索引重复来编写(虽然有点骇人听闻) 回读实际上有点棘手