【问题标题】:Write Pandas DataFrame in to MySQL database将 Pandas DataFrame 写入 MySQL 数据库
【发布时间】:2013-07-22 07:31:58
【问题描述】:

我正在尝试使用以下代码将 pandas 数据框写入 MySQL 数据库。

import pandas as pd
import numpy as np
from pandas.io import sql
import MySQLdb

df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8]]).T

db = MySQLdb.connect("192.168.56.101","nilani","123","test")
cursor = db.cursor()

cursor.execute("DROP TABLE IF EXISTS TEST")

sql = """CREATE TABLE TEST (
         ID  INT NOT NULL,
         COL1 CHAR(20),
         COL2 CHAR(20),  
         COL3 CHAR(20))"""

cursor.execute(sql)

sql.write_frame(df, con=db, name='TEST', flavor='mysql')

db.close()

我一直在参考this 问题和其他资源。无论如何我都会收到以下错误。会是什么原因?

sql.write_frame(df, con=db, name='TEST', flavor='mysql')
AttributeError: 'str' object has no attribute 'write_frame'

【问题讨论】:

    标签: python mysql pandas dataframe


    【解决方案1】:

    您已经用sql = """... 覆盖了from pandas.io import sql,所以sql 现在是一个字符串,而不再是包含write_frame 函数的pandas 模块。


    编辑:您得到的AttributeError: 'numpy.int64' object has no attribute 'replace' 错误是由于您使用整数列标签(这是一个错误)。尝试将列标签设置为其他内容,例如:

    df.columns = ['COL1', 'COL2', 'COL3']
    

    【讨论】:

    • 好的,那我现在该怎么办?
    • 我在删除表创建代码后尝试了这个...sql.write_frame(df, con=db, name='TEST', if_exists='replace', flavor='mysql'), 它说:AttributeError:'numpy.int64'对象没有属性'replace'
    • 注意,'replace' 选项似乎有一个错误(参见例如github.com/pydata/pandas/issues/2971)。它在没有if_exists='replace' 的情况下运行吗?
    • 并回答要做什么:只需将表创建代码重命名为 sql 以外的其他名称,并使用 cursor.execute(other_name) 执行此代码
    • 如果不替换它会生成此错误..ValueError:表'NEW'已经存在。使用替换会出现上述错误。我按照你说的做,现在问题出在这个替换的东西上。:(
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 2017-05-01
    • 2017-02-17
    • 1970-01-01
    • 2016-10-06
    • 2019-07-11
    • 2017-08-01
    • 2020-10-04
    相关资源
    最近更新 更多