我正在查询SQL数据库,我想使用pandas来处理数据.但是,我不确定如何移动数据.以下是我的输入和输出.
import pyodbc
import pandas
from pandas import DataFrame
cnxn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\users\bartogre\desktop\CorpRentalPivot1.accdb;UID="";PWD="";')
crsr = cnxn.cursor()
for table_name in crsr.tables(tableType='TABLE'):
print(table_name)
cursor = cnxn.cursor()
sql = "Select sum(CYTM), sum(PYTM), BRAND From data Group By BRAND"
cursor.execute(sql)
for data in cursor.fetchall():
print (data)
Run Code Online (Sandbox Code Playgroud)
('C:\\users\\bartogre\\desktop\\CorpRentalPivot1.accdb', None, 'Data', 'TABLE', None)
('C:\\users\\bartogre\\desktop\\CorpRentalPivot1.accdb', None, 'SFDB', 'TABLE', None)
(Decimal('78071898.71'), Decimal('82192672.29'), 'A')
(Decimal('12120663.79'), Decimal('13278814.52'), 'B')
Run Code Online (Sandbox Code Playgroud) 我试图了解python如何将数据从FTP服务器提取到pandas然后将其移动到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!"
Run Code Online (Sandbox Code Playgroud)
当我删除ftp代码时,它运行完美,但我不明白如何进行下一次跳转以将其转换为Microsoft SQL服务器,或者即使可以在不先保存到文件中也是如此.
我需要使用“in”子句查询表,其中 SQL 如下所示:
select * from some_table where some_field in (?)
Run Code Online (Sandbox Code Playgroud)
我最初采取了一种天真的方法并尝试了以下方法:
in_items = [1,2,3,4]
df = pd.read_sql(MY_SQL_STATEMENT, con=con, params=[in_items]
Run Code Online (Sandbox Code Playgroud)
这不起作用,它抛出以下错误:
The SQL contains 1 parameter markers, but 4 parameters were supplied
Run Code Online (Sandbox Code Playgroud)
我陷入困境的是弄清楚如何将项目列表作为单个参数传递。
我可以采用字符串连接方法,例如:
MY_SQL = 'select * from tableA where fieldA in ({})'.format(
','.join([str(x) from x in list_items]))
df = pd.read_sql(MY_SQL, con=con)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我宁愿避免这种方法。有谁知道一种将值列表作为单个参数传递的方法?
我也愿意采用一种可能更聪明的方法来做到这一点。:)
我在尝试从脚本对某些数据库执行一些 I/O 操作时遇到了麻烦Python3。
当我想要连接到数据库时,我习惯性地使用psycopg2to 来处理连接和游标。
我的数据通常存储为and/or的等效项。 Pandas DataFramesGeoPandasGeoDataFrames
Pandas:我可以依赖它.read_sql()作为参数的方法con,如文档中所述:
con : SQLAlchemy connectable (engine/connection) or database str URI
or DBAPI2 connection (fallback mode)'
Using SQLAlchemy makes it possible to use any DB supported by that
library. If a DBAPI2 object, only sqlite3 is supported. The user is responsible
for engine disposal and connection closure …Run Code Online (Sandbox Code Playgroud) 我想隐藏这个警告UserWarning: pandas only support SQLAlchemy connectable(engine/connection) ordatabase string URI or sqlite3 DBAPI2 connectionother DBAPI2 objects are not tested, please consider using SQLAlchemy并且我已经尝试过
import warnings
warnings.simplefilter(action='ignore', category=UserWarning)
import pandas
Run Code Online (Sandbox Code Playgroud)
但警告仍然显示。
我的 python 脚本从数据库读取数据。我用于pandas.read_sqlSQL 查询和psycopg2数据库连接。
我还想知道哪一行触发了警告。
pandas ×5
python ×4
pyodbc ×2
sqlalchemy ×2
dataframe ×1
geopandas ×1
postgresql ×1
psycopg2 ×1
sql ×1
sql-server ×1