gpt4 book ai didi

python - 如何按整数列除以 sqlalchemy 中的时间差进行排序?

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:19 25 4
gpt4 key购买 nike

我正在尝试编写按以下方式对链接进行排序的算法:链接点数/时间差(以秒为单位)/行数

我唯一遇到麻烦的部分是时差部分。

(Link.query
.join(Point, (Point.link == Link.id))
.group_by(Link.id)
.filter(Link.visibility == 1)
.order_by(((Link.points / (datetime.now() - Link.time).seconds) / func.count(Point.id)).desc()))

最佳答案

注意:嗯,您没有提供任何 ORM 示例,所以我猜了一个。

我认为你不需要将 python 日期类型与 sql 日期类型混淆。您需要使用数据库中的函数。

如果使用 SQLite,您可以使用以下顺序:

# only valid for sqlite
my_order = func.count(Link.points)/(functions.current_timestamp() - Link.time) / func.count(Point.id)

如果使用 MySQL,您可以使用以下命令:

# only valid for MySQL
my_order = func.count(Link.points)/func.time_to_sec(func.timediff(functions.current_timestamp(), Link.time)) / func.count(Point.id)

这是使用 SQLite 的完整示例:

#!/usr/bin/python
import datetime

from sqlalchemy import create_engine, Column, types, ForeignKey
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session, Session, relationship, backref
from sqlalchemy.schema import DefaultGenerator
from sqlalchemy.sql import functions, func

Base = declarative_base()

class Link(Base):
__tablename__ = "link"
id = Column(types.Integer, primary_key=True)
visibility = Column(types.Integer, default=1)
time = Column(types.DateTime, default=functions.current_timestamp())

points = relationship("Point", backref="link")

def __repr__(self):
return "Link(id=%r, visibility=%r, time=%r, points=[#%r])" % (self.id,
self.visibility, self.time, len(self.points))

class Point(Base):
__tablename__ = "point"
id = Column(types.Integer, primary_key=True)
link_id = Column(types.Integer, ForeignKey('link.id'))

def __repr__(self):
return "Point(id=%r, link_id=%r" % (self.id, self.link_id)


engine = create_engine('sqlite:///:memory:', echo=True)
session = scoped_session(sessionmaker(bind=engine))
Base.metadata.create_all(engine)

for i in range(10):
time = datetime.datetime(2016, 1, 31 - i)
link = Link(time=time)
for j in range(15 - i):
link.points.append(Point())
session.add(link)

my_order = (func.count(Link.points)
/ (functions.current_timestamp() - Link.time)
/ func.count(Point.id))


session.query(Link).join(Point).filter(Link.visibility==1)\
.group_by(Link.id).order_by(my_order.desc()).all()

可以编写一个根据 SQL 数据库进行不同编译的通用函数,为此,请参阅 here

关于python - 如何按整数列除以 sqlalchemy 中的时间差进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38646803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com