将Python DuckDB表插入SQL语句

2024-09-30 01:33:32 发布

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

我正在尝试使用已注册的虚拟表作为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'))的循环,但类型相同


Tags: theimport数据库sql语句connxlsxquery
1条回答
网友
1楼 · 发布于 2024-09-30 01:33:32

看起来您正在将数据帧的内容推送到Access数据库查询中。我认为在熊猫身上没有一种天然的方法可以做到这一点。我使用的技术是特定于数据库供应商的,但我只是将文本字符串构建为CTE/WITH子句或临时表。 前任: “”“将我的\u数据作为( 选择“df中的原始文本”作为df列1,“df中的原始文本”作为df列2
联合所有 选择“df中的原始文本”作为df列1,“df中的原始文本”作为df列2
联合所有 ... ) [此处为您的原始查询] “”“

相关问题 更多 >

    热门问题