我正在尝试使用已注册的虚拟表作为 SQL 语句中的表,并使用与另一个数据库的连接。我不能只是将列转换为字符串并使用它,我需要表/数据框本身在语句中工作并与 SQL 语句中的其他表连接。我正在一个 Access 数据库上尝试这个来启动。这是我到目前为止所拥有的:
import pyodbc
import pandas as pd
import duckdb
conn = duckdb.connect()
starterset = pd.read_excel (r'e:\Data Analytics\Python_Projects\Applications\DB_Test.xlsx')
conn.register("test_starter", starterset)
IDS = conn.execute("SELECT * FROM test_starter WHERE ProjectID > 1").fetchdf()
StartDate = '1/1/2015'
EndDate = '12/1/2021'
# establish the connection
connt = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=E:\Databases\Offline.accdb;')
cursor = conn.cursor()
# Run the query
query = ("Select ProjectID, Revenue, ClosedDate from Projects INNER JOIN " + IDS + " Z on Z.ProjectID = Projects.ProjectID "
"where ClosedDate between #" + StartDate + "# and #" + EndDate + "# AND Revenue > 0 order by ClosedDate")
sfd
df = pd.read_sql(query, connt)
df.to_excel(r'TEMP.xlsx', index=False)
os.system("start EXCEL.EXE TEMP.xlsx")
# Close the connection
cursor.close()
connt.close()
我在 Excel 工作表中有一个 ID 列表,我试图将其用作数据库查询的过滤器。最终,这将形成同一张表中的几个标准:日期、收入和 ID 等。
老实说,我很惊讶我在做这件事时遇到了这么多麻烦。在 SAS 中,使用 PROC SQL 非常简单,但我无法获得一个数据框来按照我的需要在 SQL 参数中进行接口。我犯了语法错误吗?
迄今为止最常见的错误是“UFuncTypeError: ufunc 'add' 不包含带有签名匹配类型的循环 (dtype('<U55'), dtype('<U55')) -> dtype('<U55')”,但类型是相同的。