Python查询sql db中的最后一条记录,但返回空白记录

     2023-03-16     282

关键词:

【中文标题】Python查询sql db中的最后一条记录,但返回空白记录【英文标题】:Python querying last record in sql db, but returning blank record 【发布时间】:2022-01-21 12:14:46 【问题描述】:

我正在使用 Python Flask 和 SQLAlchemy 创建一个简单的 Web 应用程序,该应用程序将用户输入的图书 ISBN(ISBN = 唯一的图书 ID)存储在 db 表中,然后查询该记录以供稍后在 API 中使用称呼。它使用 API 响应将图书信息存储在另一个表中。

我已确认这些表正确地存储了数据。我已经确认查询 ISBN 表会返回正确的值。但是当我尝试将查询存储为 Python 变量并在 API 调用中使用它时,它的行为总是像变量 == ''。

这是数据库设置:

class Isbn(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    isbn = db.Column(db.Integer, nullable=False)

    def __init__(self, isbn):
        self.isbn = isbn

这是查询 ISBN 表的路径,在 API 调用中使用 ISBN 记录,然后将该数据的结果存储到另一个表中:

@app.route('/addbook', methods=['POST', 'GET'])
def addbook():
    title = "Addbook"
    if request.method == 'POST':
        isbn = db.session.query(Isbn.isbn).order_by(Isbn.id).first()
        r = urllib.request.urlopen(f'https://www.googleapis.com/books/v1/volumes?q=isbn:isbn')
        data = json.load(r)
        btitle = data["items"][0]["volumeInfo"]["title"]
        author = data["items"][0]["volumeInfo"]["authors"][0]
        pagecount = data["items"][0]["volumeInfo"]["pageCount"]
        newbook = Books(title=btitle, author=author, pagecount=pagecount)
        db.session.add(newbook)
        db.session.commit()
        return redirect('/searchbook')

在应用程序的早期,我使用了在 API 调用中使用用户输入的相同方法,并且效果很好。我在这里去掉了错误处理,但错误是说 API 响应没有正文,经过研究我发现这是因为 ISBN 表查询返回 ''。

【问题讨论】:

代替db.session.query(Isbn.isbn).order_by(Isbn.id).first()试试db.session.query(Isbn.isbn).order_by(Isbn.id).scalar() @GordThompson 它给了我这个错误: sqlalchemy.exc.MultipleResultsFound: 当恰好需要一个时发现了多行。我只需要一个结果,即记录中的 ISBN 值。 嗯。好的,那… .order_by(Isbn.id).first().isbn 怎么样? @GordThompson 成功了!!你能解释一下为什么它会起作用,这样我下次就不会再头疼了吗?谢谢! 【参考方案1】:

即使在查询单个元素时,.first() 也会返回一个 SQLAlchemy Row 对象,其行为非常类似于命名元组

isbn = session.query(Isbn.isbn).order_by(Isbn.id).first()
print(type(isbn))  # <class 'sqlalchemy.engine.row.Row'>
print(isbn)  # (9783161484100,)

请注意,字符串表示包括括号和逗号,因此将其嵌入到 URL 中会产生

print(f"https://…?q=isbn:isbn")  # https://…?q=isbn:(9783161484100,)

由于意外字符,这可能无法正常工作。

由于Row 对象的行为类似于命名元组,我们可以通过名称访问它们的元素,例如my_row.my_column,因此我们可以使用

isbn = session.query(Isbn.isbn).order_by(Isbn.id).first().isbn
print(type(isbn))  # <class 'int'>
print(isbn)  # 9783161484100

print(f"https://…?q=isbn:isbn")  # https://…?q=isbn:9783161484100

【讨论】:

返回子查询中的最后一条记录 - MySQL

】返回子查询中的最后一条记录-MySQL【英文标题】:Returninglastrecordinasubquery-MySQL【发布时间】:2021-01-3109:16:29【问题描述】:所以我正在为我的网站创建一个类似于Facebook风格的消息系统(我知道是对的)。我打算发生的是列出... 查看详情

sql查询最后一条记录

...ot;bigid"),conn,1,1,请大家帮我想一下,这句话如何改成查询最后一条记录,我用过orderbydesc也不行嗯,是的,Last()\LastOrDefault()这些是LinqToObject的一部分,也就是说就是对实现了IEnumerableT;IEnumerable接口的集合有效。但是LinqToSQ... 查看详情

当值与 SQL Server 中的最后一条记录之间存在特定差距时如何选择值

...布时间】:2018-04-2518:03:30【问题描述】:我正在创建一个查询,当它与SQLServer中的最后一条记录之间存在10的差距时,我可以选择值。假设冰箱中有一个传感器,传感器每5分钟 查看详情

如何从 sql 查询中获取第一条和最后一条记录?

】如何从sql查询中获取第一条和最后一条记录?【英文标题】:HowtogetFirstandLastrecordfromasqlquery?【发布时间】:2009-09-2804:16:31【问题描述】:我在PostgreSQL中有一个表,我对它运行了一个查询,其中包含几个返回多行的条件,按其... 查看详情

Microsoft SQL 查询 - 从第二个表返回最后一条记录

】MicrosoftSQL查询-从第二个表返回最后一条记录【英文标题】:MicrosoftSQLQuery-Returnlastrecordfromsecondtable【发布时间】:2015-01-1117:21:45【问题描述】:我有2个要运行查询的表。第一个表是dbo.Incidents,它与主键IncidentID.联系第二个表是... 查看详情

Hive 查询以获取插入表中的最后一条记录

】Hive查询以获取插入表中的最后一条记录【英文标题】:HiveQuerytogetthelastrecordinsertedinthetable【发布时间】:2017-04-1419:01:10【问题描述】:adatetimeb355734072017041214093031026045390891235573407201704121409303102604539089123557340720170412141054310260453 查看详情

将表单框中的值插入表格的最后一条记录

...的最新记录中。我还尝试过执行相同操作的INSERTINTOVALUES查询(通过VBA和常规SQL查询)。是否可以将 查看详情

sql查询获取已删除记录

】sql查询获取已删除记录【英文标题】:sqlquerytogetdeletedrecords【发布时间】:2012-06-1914:21:38【问题描述】:您有一个表table1,其中包含id列,即int(11),notnull,auto_increment,从1开始。假设您有10,000条记录。很明显,最后一条记录的id... 查看详情

linq 伪代码中的 SQL 查询

】linq伪代码中的SQL查询【英文标题】:SQLqueryinlinqpseudocode【发布时间】:2021-07-1214:07:18【问题描述】:我只需要输出表中的最后一条记录,但只需要输出组中的那些用户。我只能显示那些在组中的人。但我无法获得最后的记录... 查看详情

Oracle Sql 查询一条记录大数据中的报表

】OracleSql查询一条记录大数据中的报表【英文标题】:OracleSqlqueryforreportinonerecordlargedata【发布时间】:2020-10-1618:04:43【问题描述】:亲爱的我需要为每个员工每个日期的交易数量生成报告每个员工有10条记录,每条记录包括当天... 查看详情

sqlserver如何查询最后一条记录

SQLServer查询最后一条记录有两种方法,一种是使用TOP命令,一种是使用LIMIT命令,具体方法如下:1、使用TOPSELECTTOP1*FROMuser;SELECTTOP1*FROMuserorderbyiddesc;2、使用LIMITSELECT*FROMuserLIMIT1;SELECT*FROMuserORDERBYidASCLIMIT1;SELECT*FROMuserORDERBYidDESCLIMIT1;... 查看详情

laravel如何输出最后一条执行的sql

DB::connection()->enableQueryLog(); // 开启查询日志    DB::table(‘xxx‘); // 要查看的sql    $queries = DB::getQueryLog(); //  查看详情

mysql查询符合条件的最后一条

订单表OID|Content订单状态记录表:RID|OID|status|time状态记录记录了订单状态变化,那么一个订单的最后一条状态记录就是它的当前状态。获取订单的当前状态。Howto?selectoidcurstatusfromorders...我这是两张表啊……订单状态记录里有很多... 查看详情

Sql 查询为表中的每个组合返回一条记录

】Sql查询为表中的每个组合返回一条记录【英文标题】:Sqlquerytoreturnonesinglerecordpereachcombinationinatable【发布时间】:2012-05-0520:54:43【问题描述】:我需要(from_id,to_id)的每个组合的结果,它具有最小值和匹配条件的循环。所以基本... 查看详情

如何在 SQL 中向后运行 UPDATE 命令(最后一条记录到第一条)?

...:2013-12-2302:00:42【问题描述】:我实际上想在Access数据库中的表上运行UPDATE命令(通过ADO.NET),但我希望它向后运行-即从最后一条记录到第一条-以避免相同的重复记录\'ID\'.我尝试添加& 查看详情

查询回访用户、第一条记录和最后一条记录

】查询回访用户、第一条记录和最后一条记录【英文标题】:Queryreturningusers,firstrecordandlastrecord【发布时间】:2013-02-0620:44:48【问题描述】:我正在尝试编写一个查询,显示我们的唯一用户、他们在系统中首次记录条目的日期以... 查看详情

在访问查询中仅显示具有特定字段数据的最后一条记录

】在访问查询中仅显示具有特定字段数据的最后一条记录【英文标题】:Showonlylastrecordwithspecificfielddatainaccessquery【发布时间】:2016-12-0620:45:01【问题描述】:我的SQL技能非常基础,但我正在尝试为一家小型企业设置一个非营利... 查看详情

使用一条sql查询多个表中的记录数

方法一:selectt1.num1,t2.num2,t3.num3from(selectcount(*)num1fromtable1)t1,(selectcount(*)num2fromtable2)t2,(selectcount(*)num3fromtable3)t3方法二:selectsum(t.num1),sum(t.num2),sum(t.num3)from(selectcount(*)n 查看详情