python - 如何使用 SQLAlchemy from_select 插入选择?
问题描述
我在使用 SQLAlchemy 中的 from_select 构造时遇到了麻烦。我似乎无法为 ' SELECT *
' 找到正确的语法。我见过的每个示例都显示了明确的列名。我的问题在于下面的行,我只是无法正确使用语法:
meta.tables['XXXX'].insert().from_select(['*'],local_result)
我看过一个像下面这样的例子,但由于某种原因我不能把它翻译成选择 *:
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))
推荐阅读
- java - 如何在 Android 中使用计时器
- spring-boot - 请求被拒绝,因为在 Docushare Flex 中创建新文档时未找到多部分边界
- kubernetes - Kubernetes 默认的 liveness 和 readiness 探针
- html - HTML 和 CSS Javascript Jquery
- python - 从熊猫的列列表中删除停用词时出现查找错误
- ios - 函数声明中的 Swift 错误闭包
- javascript - 更改控制器内的模型对象以操作 DOM 对象
- c++ - 从子 qml 返回到主 qml
- javascript - 即使刷新页面后,如何保持按钮禁用?
- python - 使用命名实体识别的自动摘要