Записать таблицу Python в SQL - PullRequest
0 голосов
/ 28 мая 2018

У меня есть 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() 

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

вам не нужно использовать 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;pyodbc не создаст таблицу для вас 2) после вставки данных вам понадобится дополнительная строка кода:

con.commit()
0 голосов
/ 28 мая 2018

Поскольку to_sql для SQL Server требует соединения SQLAlchemy, а не необработанного соединения, рассмотрим метод курсора, выполняющий итерации по строкам информационного кадра с использованием того же подготовленного оператора SQL:

for idx, row in pytrend.interest_over_time().iterrows():
  cur.execute(qry, row)
  con.commit()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...