我有pytrends这样的输出:
>>> from pytrends.request import TrendReq
>>> import pandas as pd
>>> import pyodbc as db
<...>
>>> pytrend.interest_over_time()
date Cat Dog Bat Rat Roo IsPartial
2017-05-28 61 1 27 23 24 False
2017-06-04 61 1 25 28 27 False
2017-06-11 64 2 23 22 22 False
2017-06-18 75 3 27 27 26 False
如何将此数据插入到相同的MS SQL表中,如下所示?
CREATE TABLE GoogleTrends (
[Date] DATE
,[Cat] TINYINT
,[Dog] TINYINT
,[Bat] TINYINT
,[Rat] TINYINT
,[Roo] TINYINT
,[IsPartial] BIT
)
采取的步骤:
>>> con = db.connect('DRIVER={ODBC Driver 13 for SQL Server};SERVER=ServerName;Trusted_Connection=yes;DATABASE=DBName')
>>> cur = con.cursor()
然后应该像
那样qry = '''INSERT INTO dbo.GoogleTrends
(Date, Cat, Dog, Bat, Rat, Roo, IsPartial)
VALUES(?, ?, ?, ?, ?, ?, ?)
'''
但我不太确定。无论如何,使用
>>>cur.execute(qry, param_values)
导致错误:'SQL包含6个参数标记,但提供了1个参数','HY000'如果我分配
param_values = pytrend.interest_over_time()
答案 0 :(得分:0)
由于SQL Server的to_sql
需要SQLAlchemy连接而不是原始连接,因此请考虑使用相同的准备SQL语句迭代数据帧行的游标方法:
for idx, row in pytrend.interest_over_time().iterrows():
cur.execute(qry, row)
con.commit()
答案 1 :(得分:0)
您不必使用SQLAlchemy,但它是一个选项。 如果你想使用pyodbc,你几乎已经这样做了。
qry = '''INSERT INTO dbo.GoogleTrends
(Date, Cat, Dog, Bat, Rat, Roo, IsPartial)
VALUES(?, ?, ?, ?, ?, ?, ?)
'''
cur.execute(qry ,(Date_val, Cat_val, Dog_val, Bat_val, Rat_val, Roo_val, IsPartial_val))
请注意,execute函数中的第二个参数也接受一个元组。 但是请考虑另外两个注释: 1)你需要自己在sql server中创建表; pyodbc不会为你创建表 2)插入数据后,您需要额外的代码行:
con.commit()