PyMySQL Error: 'str' object has no attribute 'to_sql'
PyMySQL Error: 'str' object has no attribute 'to_sql'
我是编码新手,这是我的第一个项目。到目前为止,我已经通过谷歌搜索、教程和堆栈拼凑了我的所有内容。
我正在尝试将数据从 pandas 抓取的 RSS 提要 df 添加到远程 sql 数据库。我一直在使用 this post and this post 的组合来修复我的错误,但答案似乎不适用于我的问题。
有没有人有解决错误的潜在方法:
AttributeError Traceback (most recent call
last) in ()
19 cursor.execute(sql)
20
---> 21 sql.to_sql(df, con=conn, name='rsstracker', if_exists='append', flavor='mysql')
22
23 # disconnect from server
AttributeError: 'str' object has no attribute 'to_sql'
import pandas as pd
from pandas.io import sql
import feedparser
import time
rawrss = ['http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
'https://www.yahoo.com/news/rss/',
'http://www.huffingtonpost.co.uk/feeds/index.xml',
'http://feeds.feedburner.com/TechCrunch/',
]
posts = []
for url in rawrss:
feed = feedparser.parse(url)
for post in feed.entries:
posts.append((post.title, post.link, post.summary))
df = pd.DataFrame(posts, columns=['title', 'link', 'summary']) # pass data to init
import pymysql
# Open database connection
db = pymysql.connect(host="host", port=##, user="username", password="password", db="sql#######" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS rsstracker")
# Create table as per requirement
sql = """CREATE TABLE rsstracker(
article_title varchar(255),
article_url varchar(1000),
article_summary varchar(1000))"""
cursor.execute(sql)
sql.to_sql(df, con=conn, name='rsstracker', if_exists='append', flavor='mysql')
# disconnect from server
db.close()
该行应该是:
df.to_sql(con=db, name='rsstracker', if_exists='append', flavor='mysql')
但是您可能需要使用 SQLAlchemy 才能进行导出 (doc)
您可以尝试将 SQLAlchemy 与 pymysql 一起使用,如下所示:
import pymysql
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://<username>:<password>@<host>[:<port>]/<dbname>')
engine.execute("DROP TABLE IF EXISTS rsstracker")
engine.execute("""CREATE TABLE rsstracker(
article_title varchar(255),
article_url varchar(1000),
article_summary varchar(1000))""")
df.to_sql(con=engine, name='rsstracker', if_exists='append', , flavor='mysql')
我是编码新手,这是我的第一个项目。到目前为止,我已经通过谷歌搜索、教程和堆栈拼凑了我的所有内容。
我正在尝试将数据从 pandas 抓取的 RSS 提要 df 添加到远程 sql 数据库。我一直在使用 this post and this post 的组合来修复我的错误,但答案似乎不适用于我的问题。
有没有人有解决错误的潜在方法:
AttributeError Traceback (most recent call last) in () 19 cursor.execute(sql) 20 ---> 21 sql.to_sql(df, con=conn, name='rsstracker', if_exists='append', flavor='mysql') 22 23 # disconnect from server
AttributeError: 'str' object has no attribute 'to_sql'
import pandas as pd
from pandas.io import sql
import feedparser
import time
rawrss = ['http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml',
'https://www.yahoo.com/news/rss/',
'http://www.huffingtonpost.co.uk/feeds/index.xml',
'http://feeds.feedburner.com/TechCrunch/',
]
posts = []
for url in rawrss:
feed = feedparser.parse(url)
for post in feed.entries:
posts.append((post.title, post.link, post.summary))
df = pd.DataFrame(posts, columns=['title', 'link', 'summary']) # pass data to init
import pymysql
# Open database connection
db = pymysql.connect(host="host", port=##, user="username", password="password", db="sql#######" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS rsstracker")
# Create table as per requirement
sql = """CREATE TABLE rsstracker(
article_title varchar(255),
article_url varchar(1000),
article_summary varchar(1000))"""
cursor.execute(sql)
sql.to_sql(df, con=conn, name='rsstracker', if_exists='append', flavor='mysql')
# disconnect from server
db.close()
该行应该是:
df.to_sql(con=db, name='rsstracker', if_exists='append', flavor='mysql')
但是您可能需要使用 SQLAlchemy 才能进行导出 (doc)
您可以尝试将 SQLAlchemy 与 pymysql 一起使用,如下所示:
import pymysql
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://<username>:<password>@<host>[:<port>]/<dbname>')
engine.execute("DROP TABLE IF EXISTS rsstracker")
engine.execute("""CREATE TABLE rsstracker(
article_title varchar(255),
article_url varchar(1000),
article_summary varchar(1000))""")
df.to_sql(con=engine, name='rsstracker', if_exists='append', , flavor='mysql')