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

SQLAlchemy:防止自动关闭

tricks: 如何把sqlalchemy的数据转化为json格式

sqlalchemy 执行原生sql语句