python - 如何使用 SQLAlchemy from_select 插入选择?

标签 python sql sql-server sqlalchemy

我在使用 SQLAlchemy 中的 from_select 结构时遇到了麻烦。我似乎无法获得“SELECT *”的正确语法。我见过的每个示例都显示了明确的列名称。我的问题在于下面的行,我只是无法获得正确的语法:

meta.tables['XXXX'].insert().from_select(['*'],local_result)

我见过如下示例,但由于某种原因我无法将其翻译为 select *:

sel = select([table1.c.a, table1.c.b]).where(table1.c.c > 5)
ins = table2.insert().from_select(['a', 'b'], sel)

谢谢!

import urllib
import pyodbc
from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy import Table
from sqlalchemy import select
from sqlalchemy import or_

local_params = urllib.parse.quote_plus("DRIVER={SQL Server};SERVER=XXX;DATABASE=XXX;Trusted_Connection=yes")
local_engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % local_params)
local_conn = local_engine.connect()
local_result = local_conn.execute("select * from dbo.XXX")

cloud_params = urllib.parse.quote_plus("DRIVER={ODBC Driver 17 for SQL Server};SERVER=XXXXX;DATABASE=XXXX;UID=XXXX;PWD=XXXX")
cloud_engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % cloud_params)
cloud_conn = cloud_engine.connect()

meta = MetaData()
meta.reflect(bind=cloud_conn)

meta.tables['XXXX'].insert().from_select(['*'],local_result)

#Tried This Also But Doesn't Work
#cloud_conn.execute(meta.tables['XXXX'].insert().from_select(['*'],local_result))

local_conn.close()
local_result.close()
cloud_conn.close()

我收到错误:

sqlalchemy.exc.ArgumentError: FROM expression expected

最佳答案

您可以使用.keys()来获取select语句的所有列:

cloud_conn.execute(meta.tables['XXXX'].insert().from_select(local_result.keys(),local_result))

关于python - 如何使用 SQLAlchemy from_select 插入选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400901/

相关文章:

python - SQLAlchemy : Get database name from engine

mysql - 在多个 SQL 语句中使用 Count() 并使用 join 连接它们

python - openpyxl - 更改 n 列的宽度

python - 查找最长的连续子数组(未排序)-Python

php - 生成随机数并搜索数据库

SQL:根据某些条件返回聚合结果

python - 在 QTextEdit 小部件中解析和显示 HTML

Python线程错误

mysql - 存储过程 : if else statement inside case when

sql - 错误 : ALTER DATABASE statement not allowed within multi-statement transaction