SQLAlchemy:execute() 得到了一个意外的关键字参数
Posted
技术标签:
【中文标题】SQLAlchemy:execute() 得到了一个意外的关键字参数【英文标题】:SQLAlchemy: execute() got an unexpected keyword argument 【发布时间】:2021-05-21 20:02:16 【问题描述】:我有database.py
,其中包含数据库执行功能
import sqlachemy
class DB():
def __init__(self, **kwargs):
self.connection = None
self.connect(**kwargs)
def connect(self, **kwargs):
if 'url' in kwargs and kwargs.get('url') is not None:
return self.connectUrl(kwargs.get('url'), kwargs.get('username'),
kwargs.get('password'), kwargs.get('database'))
else :
return self.connectHost(kwargs.get('host'), kwargs.get('port'), kwargs.get('username'),
kwargs.get('password'), kwargs.get('database'))
def execute(self, query):
if self.connect is None:
raise Exception('No connection')
try:
with self.connection.connect() as conn:
return conn.execute(query)
except (pymysql.err.OperationalError, sqlalchemy.exc.OperationalError) as e:
print(e)
except (Exception) as e:
print(e)
else:
return None
我还有一个main.py
。我从上面的文件中导入了 DB 类并在这里使用它。
from database import db
# db connection
def connect():
global db
db = DB(
database="DATABASE_NAME",
username="DATABASE_USER",
password="XXXXXXXXX",
url="XXXXXXX",
host="XXXXXXXXXXX",
port="XXXXXXX",
)
SQL_QUERY = """ select * from sample_table where country = :country and age = :age """
_age = 5
_country = 'US'
connect()
query = text(SQL_QUERY).bindparams(bindparam("country", String), bindparam("age", String))
db.execute(query, age=_age, country=_country)
当我尝试执行此脚本时,出现错误
db.execute(query,age=_age, country=_country) TypeError: execute() got an unexpected keyword argument 'age'
谁能帮我解决这个问题?
【问题讨论】:
你为什么没有收到 "SQL = ...." 的错误。你不能在 python 中拥有这样的 sql @eshirvana 这是一个错误。我已经编辑了这个问题。请看一下。 【参考方案1】:您可以简单地将变量作为元组传递:
query = 'select * from sample_table where country = ? and age = ?'
_age = 5
_country = 'US'
connect()
db.execute(query, (_age,_country,))
【讨论】:
以上是关于SQLAlchemy:execute() 得到了一个意外的关键字参数的主要内容,如果未能解决你的问题,请参考以下文章
Python、SQLAlchemy 在 connection.execute 中传递参数
使用 Pandas to_sql 时获取 sqlalchemy.exc.InternalError 异常值为 'cursor.execute(statement, parameters)'
SQLAlchemy execute() 将 ResultProxy 作为元组返回,而不是 dict