gpt4 book ai didi

python - 如何在 SQLAlchemy 的原始 JOIN 查询中正确选择重复的字段名称

转载 作者:太空宇宙 更新时间:2023-11-03 20:08:20 27 4
gpt4 key购买 nike

我正在使用 SQLAlchcemy 中的 Connection.execute() 运行原始 MySQL JOIN 查询。但是,我在获取任意两个同名字段/列的数据时遇到了问题。

我的模型:

class Client(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement= True)
client_name = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), nullable=False)

class User(db.Model):
__table_args__ = {'mysql_engine': 'InnoDB', 'mysql_charset': 'utf8', 'mysql_collate': 'utf8_general_ci'}
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(120), nullable=False)
client_id = db.Column('client_id', db.Integer, nullable=True, index=True)

正如您在两个模型中看到的,我有一个名为 id 的字段

然后我就有了这个功能

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://my_user:password@localhost/my_db'
db = SQLAlchemy(app)
conn = db.engine.connect()
sql_statement = """SELECT * FROM User u JOIN Client c ON u.client_id = c.id"""
info = conn.execute(sql_statement)
for row in info:
print(row)
row = dict(row)
print(row)

当我循环执行结果时,我希望得到带有两个字段的记录 u.idc.id但是我只得到一个名称为 id 的字段(甚至不是 u.id 或 c.id)。

我已经尝试了 SELECT u.*, c.*SELECT u.id , c.id但这没有用。

第一次打印(在转换为 dict 之前)打印具有两个 id 的所有字段的值,但是在将其转换为 dict 后,它不再起作用,在我的用例中,我必须将其转换为 dict。

如何在不使用 AS 的情况下获得预期的行为在我的查询中?

注意:如果我使用 SELECT u.* AS u_id, c.id AS c_id它工作正常,但我正在寻找另一种不使用 AS 的方法.

最佳答案

我找到的解决此问题的唯一方法是执行以下操作:

sql_statement = """SELECT u.id AS `u.id`, c.id AS `c.id` FROM User u JOIN Client c ON u.client_id = c.id"""

这不是这个问题的解决方案,只是我遵循的解决方案,但仍然不太满意!

关于python - 如何在 SQLAlchemy 的原始 JOIN 查询中正确选择重复的字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58836522/

27 4 0
文章推荐: python - 在 AWS Lambda 上使用 Python 中的 Pdf2img 将 pdf 页面转换为图像
文章推荐: html - 我创建了一个页脚 div 无法正常工作的网页
文章推荐: c# - 用标签拆分字符串,保留定界符
文章推荐: javascript - onclick显示写在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com