Why does this code run normally in Frappe v13 but encounter errors in Frappe v15?

doc.guest_flat: [<GuestFlat: 7ccj1b7mob docstatus=1 parent=7bbrfnsb5j-1>]
doc.guest_email: abc@abc.com

Python:
In[27]: for flat in doc.guest_flat:
frappe.share.remove(
doctype=‘Flat’,
name=flat,
user=guest_email,
lags={‘ignore_permissions’:True}
)


OperationalError Traceback (most recent call last)
Cell In[27], line 2
1 for flat in doc.guest_flat:
----> 2 frappe.share.remove(
3 doctype=‘Flat’,
4 name=flat,
5 user=guest_email,
6 flags={‘ignore_permissions’:True}
7 )

File ~/frappe-bench/apps/frappe/frappe/share.py:64, in remove(doctype, name, user, flags)
63 def remove(doctype, name, user, flags=None):
—> 64 share_name = frappe.db.get_value(
65 “DocShare”, {“user”: user, “share_name”: name, “share_doctype”: doctype}
66 )
68 if share_name:
69 frappe.delete_doc(“DocShare”, share_name, flags=flags)

File ~/frappe-bench/apps/frappe/frappe/database/database.py:519, in Database.get_value(self, doctype, filters, fieldname, ignore, as_dict, debug, order_by, cache, for_update, run, pluck, distinct, skip_locked, wait)
471 def get_value(
472 self,
473 doctype,
(…)
487 wait=True,
488 ):
489 “”“Returns a document property or list of properties.
490
491 :param doctype: DocType name.
(…)
516 frappe.db.get_value(“System Settings”, None, “date_format”)
517 “””
→ 519 result = self.get_values(
520 doctype,
521 filters,
522 fieldname,
523 ignore,
524 as_dict,
525 debug,
526 order_by,
527 cache=cache,
528 for_update=for_update,
529 run=run,
530 pluck=pluck,
531 distinct=distinct,
532 limit=1,
533 skip_locked=skip_locked,
534 wait=wait,
535 )
537 if not run:
538 return result

File ~/frappe-bench/apps/frappe/frappe/database/database.py:623, in Database.get_values(self, doctype, filters, fieldname, ignore, as_dict, debug, order_by, update, cache, for_update, run, pluck, distinct, limit, skip_locked, wait)
621 if order_by:
622 order_by = “modified” if order_by == DefaultOrderBy else order_by
→ 623 out = self._get_values_from_table(
624 fields=fields,
625 filters=filters,
626 doctype=doctype,
627 as_dict=as_dict,
628 debug=debug,
629 order_by=order_by,
630 update=update,
631 run=run,
632 pluck=pluck,
633 distinct=distinct,
634 limit=limit,
635 for_update=for_update,
636 skip_locked=skip_locked,
637 wait=wait,
638 )
639 except Exception as e:
640 if ignore and (
641 frappe.db.is_missing_column(e)
642 or frappe.db.is_table_missing(e)
643 or str(e).startswith(“Invalid DocType”)
644 ):

File ~/frappe-bench/apps/frappe/frappe/database/database.py:896, in Database._get_values_from_table(self, fields, filters, doctype, as_dict, debug, order_by, update, for_update, skip_locked, wait, run, pluck, distinct, limit)
893 if isinstance(fields, str) and fields == “*”:
894 as_dict = True
→ 896 return query.run(as_dict=as_dict, debug=debug, update=update, run=run, pluck=pluck)

File ~/frappe-bench/apps/frappe/frappe/query_builder/utils.py:87, in patch_query_execute..execute_query(query, *args, **kwargs)
85 child_queries = query._child_queries if isinstance(query._child_queries, list) else
86 query, params = prepare_query(query)
—> 87 result = frappe.db.sql(query, params, *args, **kwargs) # nosemgrep
88 execute_child_queries(child_queries, result)
89 return result

File ~/frappe-bench/apps/frappe/frappe/database/database.py:234, in Database.sql(self, query, values, as_dict, as_list, debug, ignore_ddl, auto_commit, update, explain, run, pluck, as_iterator)
231 query += f" /* FRAPPE_TRACE_ID: {trace_id} */"
233 try:
→ 234 self._cursor.execute(query, values)
235 except Exception as e:
236 if self.is_syntax_error(e):

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/cursors.py:153, in Cursor.execute(self, query, args)
149 pass
151 query = self.mogrify(query, args)
→ 153 result = self._query(query)
154 self._executed = query
155 return result

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/cursors.py:322, in Cursor._query(self, q)
320 conn = self._get_db()
321 self._clear_result()
→ 322 conn.query(q)
323 self._do_get_result()
324 return self.rowcount

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py:563, in Connection.query(self, sql, unbuffered)
561 sql = sql.encode(self.encoding, “surrogateescape”)
562 self._execute_command(COMMAND.COM_QUERY, sql)
→ 563 self._affected_rows = self._read_query_result(unbuffered=unbuffered)
564 return self._affected_rows

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py:825, in Connection._read_query_result(self, unbuffered)
823 else:
824 result = MySQLResult(self)
→ 825 result.read()
826 self._result = result
827 if result.server_status is not None:

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py:1199, in MySQLResult.read(self)
1197 def read(self):
1198 try:
→ 1199 first_packet = self.connection._read_packet()
1201 if first_packet.is_ok_packet():
1202 self._read_ok_packet(first_packet)

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/connections.py:775, in Connection._read_packet(self, packet_type)
773 if self._result is not None and self._result.unbuffered_active is True:
774 self._result.unbuffered_active = False
→ 775 packet.raise_for_error()
776 return packet

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/protocol.py:219, in MysqlPacket.raise_for_error(self)
217 if DEBUG:
218 print(“errno =”, errno)
→ 219 err.raise_mysql_exception(self._data)

File ~/frappe-bench/env/lib/python3.10/site-packages/pymysql/err.py:150, in raise_mysql_exception(data)
148 if errorclass is None:
149 errorclass = InternalError if errno < 1000 else OperationalError
→ 150 raise errorclass(errno, errval)

OperationalError: (1305, ‘FUNCTION _b533f5fdd65aaf8c.GuestFlat does not exist’)