将python表写入SQL

2024-06-16 09:50:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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

如何将这些数据插入到一个相同的mssql表中,如下所示?你知道吗

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() 

Tags: importfalsedbascatoverdogbat
2条回答

由于SQL Server的to_sql需要SQLAlchemy连接而不是原始连接,请考虑使用相同的准备好的SQL语句遍历dataframe行的游标方法:

for idx, row in pytrend.interest_over_time().iterrows():
  cur.execute(qry, row)
  con.commit()

您不必使用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) 您需要自己在sqlserver中创建表;pyodbc不会为您创建表 2) 插入数据后,您需要额外的一行代码:

con.commit()

相关问题 更多 >