【问题标题】:"SELECT name FROM sqlite_master" error while sending dataframe to MySQL using .to_sql使用 .to_sql 将数据帧发送到 MySQL 时出现“SELECT name FROM sqlite_master”错误
【发布时间】:2021-11-14 01:54:21
【问题描述】:

上下文:我想将一个连接的数据框(我从个别股票数据中加入几个数据框)发送到 MySQL 数据库,但是,我似乎无法创建表并发送那里的数据

问题:当我运行此代码df.to_sql(name='stockdata', con=con, if_exists='append', index=False)(来源:Writing a Pandas Dataframe to MySQL)时,我不断收到此错误:pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting

我也是 MySQL 新手,因此非常欢迎任何帮助!谢谢

from __future__ import print_function
import pandas as pd
from datetime import date, datetime, timedelta
import numpy as np
import yfinance as yf
import mysql.conector
import pymysql as pymysql
import pandas_datareader.data as web
from sqlalchemy import create_engine
import yahoo_fin.stock_info as si



######################################################
# PyMySQL configuration

user = '...'
passw = '...'
host = '...'
port = 3306
database = 'stockdata'

con.cursor().execute("CREATE DATABASE IF NOT EXISTS {0} ".format(database))


con = pymysql.connect(host=host,
                      port=port,
                      user=user,
                      passwd=passw,
                      db=database,
                      charset='utf8')

df.to_sql(name='stockdata', con=con, if_exists='append', index=False)

【问题讨论】:

  • 该错误与 mysql 无关,您的代码启动了一个仅适用于 sqlite 的查询,因此将数据库连接传递给 pandas 数据框时出现问题。
  • 我的猜测是您使用的是最新版本的 pandas,它需要 sqlalchemy 连接对象作为连接参数。
  • 谢谢!现在工作:)

标签: python pandas sqlalchemy


【解决方案1】:

.to_sql() 期望第二个参数是 SQLAlchemy Connectable 对象(EngineConnection)或 DBAPI Connection 对象。如果是后者,则 pandas 假定它是 SQLite 连接。

您需要使用 SQLAlchemy 创建引擎对象

engine = create_engine("mysql+pymysql://…")

并将其传递给to_sql()

【讨论】:

  • 感谢您的帮助!它现在正在工作:)
猜你喜欢
  • 2017-08-25
  • 2020-01-31
  • 2021-08-17
  • 2018-07-20
  • 2019-01-14
  • 1970-01-01
  • 2021-01-25
  • 2014-03-03
  • 2012-12-11
相关资源
最近更新 更多