当前位置: 首页 > 面试题库 >

使用PYODBC将数据从熊猫获取到SQL Server

贲培
2023-03-14
问题内容

我试图了解python如何将数据从FTP服务器拉到熊猫,然后将其移到SQL服务器。至少可以说,我的代码非常初级,我正在寻找任何建议或帮助。我试图先从FTP服务器上加载数据,这可以正常工作。…如果我随后删除此代码,并将其更改为从ms
sql服务器中选择的数据,那么它很好,因此连接字符串有效,但是插入到SQL中服务器似乎引起了问题。

import pyodbc
import pandas
from ftplib import FTP
from StringIO import StringIO
import csv

ftp = FTP ('ftp.xyz.com','user','pass' )
ftp.set_pasv(True)
r = StringIO()
ftp.retrbinary('filname.csv', r.write)

pandas.read_table (r.getvalue(), delimiter=',')


connStr = ('DRIVER={SQL Server Native Client 10.0};SERVER=localhost;DATABASE=TESTFEED;UID=sa;PWD=pass')
conn = pyodbc.connect(connStr)

cursor = conn.cursor()
cursor.execute("INSERT INTO dbo.tblImport(Startdt, Enddt, x,y,z,)" "VALUES                  (x,x,x,x,x,x,x,x,x,x.x,x)")
cursor.close()
conn.commit()
conn.close()
print"Script has successfully run!"

当我删除ftp代码时,它可以完美运行,但是我不知道如何进行下一次跳转以将其放入Microsoft SQL
Server,或者即使没有先保存到文件中也可以实现。


问题答案:

对于“写入sql服务器”部分,您可以使用便捷to_sql的pandas方法(因此无需遍历行并手动进行插入)。请参阅有关通过熊猫与SQL数据库进行交互的文档:http : //pandas.pydata.org/pandas-
docs/stable/io.html#io-sql

您至少需要熊猫0.14才能正常运行,并且还需要sqlalchemy安装。一个示例,假设df是您从中获得的DataFrame
read_table

import sqlalchemy
import pyodbc
engine = sqlalchemy.create_engine("mssql+pyodbc://<username>:<password>@<dsnname>")

# write the DataFrame to a table in the sql database
df.to_sql("table_name", engine)

另请参阅的文档页面to_sql
有关如何为带有pyobdc的sql
server的sqlalchemy创建连接引擎的更多信息,可以在这里找到:http
://docs.sqlalchemy.org/en/rel_1_1/dialects/mssql.html#dialect-mssql-pyodbc-
connect



 类似资料:
  • 问题内容: 我正在查询一个SQL数据库,我想使用熊猫来处理数据。但是,我不确定如何移动数据。以下是我的输入和输出。 问题答案: 答案更简短

  • 我试图将pandas数据帧从宽到长,但我找不到一个好方法。有没有建议通过熊猫来实现这一点? 预期结果:

  • 有可能获得数据帧中每个唯一项的最后一个条目吗?我有一个这样的数据框架: 所以我想得到用户的最后记录,例如数据帧它必须返回, 是否可以按日期获取最后一条记录。 谢谢

  • 目前,我们正在将SalesForce数据导入CSV文件,并使用read_CSV、to_CSV方法在Pandas中读取此CSV文件。我们是否有其他方法将数据从SalesForce传输到pandas dataframe。

  • 问题内容: 我正在加载一个包含浮点和字符串数据混合的txt文件。我想将它们存储在可以访问每个元素的数组中。现在我正在做 这是输入文件的结构:。 现在,数据将作为唯一列导入。我如何划分它,以便分别存储不同的元素(所以我可以调用)?以及如何定义标题? 问题答案: 您可以使用: 添加您的代码,在引号之间留一个空格。因此,熊猫可以检测值之间的空格并按列排序。数据列用于命名您的列。

  • 问题内容: 这可能很容易,但是我有以下数据: 在数据框1中: 在数据框2中: 我想要一个具有以下形式的数据框: 我尝试使用该方法,但是得到了交叉连接(即笛卡尔积)。 什么是正确的方法? 问题答案: 通常看来,您只是在寻找联接: