【发布时间】:2026-02-20 03:25:01
【问题描述】:
MySql 引发ProgrammingError 运行此sql:
SELECT parents.uuid AS parents_uuid, children.uuid AS children_uuid,
children.parent_uuid AS children_parent_uuid,
count(*) OVER (PARTITION BY parents.uuid) AS children_count
FROM parents, children
WHERE children.parent_uuid = parents.uuid ORDER BY children_count DESC
错误:
sqlalchemy.exc.ProgrammingError: (_mysql_exceptions.ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(PARTITION BY parents.uuid)' at line 1") [SQL: 'SELECT parents.uuid AS parents_uuid, children.uuid AS children_uuid, children.parent_uuid AS children_parent_uuid, count(*) OVER (PARTITION BY parents.uuid)']
对于Parent 可以有多个children 的架构,而Child 有单个parent:
Base = declarative_base()
class Parent(Base):
__tablename__ = 'parents'
uuid = Column(String(64), primary_key=True, unique=True)
def __init__(self):
self.uuid = uuid.uuid4()
class Child(Base):
__tablename__ = 'children'
uuid = Column(String(64), primary_key=True, unique=True)
parent_uuid = Column(String(64), ForeignKey('parents.uuid'))
def __init__(self, parent_uuid=None):
self.uuid = uuid.uuid4()
self.parent_uuid = parent_uuid
【问题讨论】:
-
MySQL 不支持窗口函数。
标签: python mysql sql sqlalchemy