以下排序区分大小写:
MyModel.select().order_by(MyModel.name)
<class '__main__.MyModel'> SELECT t1."id", t1."name" FROM "mymodel" AS t1 ORDER BY t1."name" []
Run Code Online (Sandbox Code Playgroud)
如何添加 aNOCASE使其不区分大小写?
或者有没有其他方法可以让它不区分大小写?
这是我的“请求”类/表:
class Request(BaseModel):
TIME_STAMP = DateTimeField(default=datetime.datetime.now)
MESSAGE_ID = IntegerField()
Run Code Online (Sandbox Code Playgroud)
对于 peewee,我想从表中选择过去 10 分钟内发生的所有“请求”。像这样的东西:
rs = Request.select().where(Request.TIME_STAMP-datetime.datetime.now<(10 minutes))
Run Code Online (Sandbox Code Playgroud)
但是,我不完全确定如何获取 TIME_STAMP 和当前时间(以分钟为单位)之间的差异。
编辑:我已经尝试过 Gerrat 的建议,但 Peewee 似乎哭了:
/usr/local/lib/python2.7/dist-packages/peewee.py:2356: Warning: Truncated incorrect DOUBLE value: '2014-07-19 15:51:24'
cursor.execute(sql, params or ())
/usr/local/lib/python2.7/dist-packages/peewee.py:2356: Warning: Truncated incorrect DOUBLE value: '0 0:10:0'
cursor.execute(sql, params or ())
Run Code Online (Sandbox Code Playgroud) 我有一个类似于Translate SQLite query, with subquery, into Peewee statement和Can peewee nest SELECT 查询以便外部查询选择内部查询的聚合的问题?.
我试图生成的结果是:给定一个fruit包含 行的表格(type, variety, price),找到每种水果中最便宜的品种。http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/中描述了几种解决方案:
select f.type, f.variety, f.price
from (
select type, min(price) as minprice
from fruits group by type
) as x inner join fruits as f on f.type = x.type and f.price = x.minprice;
Run Code Online (Sandbox Code Playgroud)
或者:
select type, variety, price
from fruits
where price = (select min(price) from fruits as f where f.type = fruits.type);
Run Code Online (Sandbox Code Playgroud)
我如何才能 Peewee-ify …
这是一个基本示例 - 帖子由用户拥有和喜欢。如何为特定用户选择喜欢的帖子?
import datetime
import peewee
class User(peewee.Model):
name = peewee.CharField(max_length=200)
class Post(peewee.Model):
user = peewee.ForeignKeyField(User)
text = peewee.TextField()
class Like(peewee.Model):
user = peewee.ForeignKeyField(User)
post = peewee.ForeignKeyField(Post)
time = peewee.DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)
我从 Like 模型的角度进行查询,从Like.select()并连接Post模型开始查询。可以吗?我如何从Post模型的角度进行查询,即Post.select()...?
为了方便起见,这里有一个完整的示例:
def check_likes():
user, _ = User.get_or_create(name="John")
post, _ = Post.get_or_create(text="Hello world!", user=user)
like, _ = Like.get_or_create(post=post, user=user)
print("Created: ", user, post, like)
# Get liked posts for user
query_likes = (Like.select()
.where(Like.user == user)
.join(User)
.join(Post))
liked_posts …Run Code Online (Sandbox Code Playgroud) 我写了一个查询,其中有一些字符串替换。我正在尝试更新表中的 url,但该 url 中包含 % 符号,这会导致tuple index out of range exception.
如果我打印查询并手动运行,它工作正常,但通过 peewee 会导致问题。我该如何解决这个问题?我猜这是因为百分号?
query = """
update table
set url = '%s'
where id = 1
""" % 'www.example.com?colour=Black%26white'
db.execute_sql(query)
Run Code Online (Sandbox Code Playgroud) 我一直在用 Flask 和 Peewee 制作一个应用程序,我正在尝试使用update()函数将数据库中的值加一。
这是问题所在:
models.User.update(
likes+=1
).execute()
Run Code Online (Sandbox Code Playgroud)
这不起作用,我只是收到错误:
File "app.py", line 171
love+=1
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
我已经使用 peewee 和 SQLite 有一段时间了,现在我正在使用 Postgres 切换到 SQLAlchemy,但我找不到等效的 DoesNotExist(参见示例)
try:
return models.User.get(models.User.id == userid)
except models.DoesNotExist:
return None
Run Code Online (Sandbox Code Playgroud)
您知道如何使用 SQLAlchemy 实现相同的目标吗?我已经检查了可以从 sqlalchemy.ext 导入的东西,但似乎没有什么是正确的。
我有以下 python 源文件来从 MySQL 数据库中检索行。问题是在订户表中要检索的行太多。如何限制要检索和处理的小块行等?
class subinfo(peewee.Model):
sub_id = peewee.IntegerField()
active = peewee.BooleanField()
sub_type = peewee.IntegerField()
sub_cat = peewee.TextField()
class Meta:
database = locdb
class subscriber(peewee.Model):
sub_id = peewee.IntegerField(unique=True, primary_key=True)
sub_start = peewee.DateTimeField()
sub_end = peewee.DateTimeField()
ref_id = peewee.BigIntegerField()
class Meta:
database = locdb
for row in subscriber.select():
if(row.sub_start >= peewee.datetime.datetime.now()):
sub1, created = subinfo.get_or_create(sub_id=row.sub_id, active=True)
if(created == False & sub1.active == False):
q = subinfo.update(active=True).where(sub_id=row.sub_id)
q.execute()
else:
subinfo.get_or_create(sub_id=row.sub_id, active=False)
Run Code Online (Sandbox Code Playgroud) 我有一个名为 jobs 的表,其中有一个名为 job_num 的列。我如何返回该列中整数的最大值?
我试过了
result = Job.select(max(Job.job_num))
Run Code Online (Sandbox Code Playgroud)
我还尝试了一些不同的组合,例如
result = Job.select(Job.job_num).max()
Run Code Online (Sandbox Code Playgroud)
我还检查了 peewee 文档。任何人都可以请帮忙。
几个月来,我一直在广泛地使用 peewee 和 postgresql。突然这开始发生。如果我运行任何查询命令并收到错误,则所有后续命令都开始返回peewee.InternalError: current transaction is aborted, commands ignored until end of transaction block.
我认为这种行为是在我将 peewee 从 3.5.2 升级到 3.7.2 时开始的,但我已经降级并且这种行为仍在继续。这绝对不总是发生。
在最简单的情况下,我有一个只有一条记录的数据库表。我尝试创建一个具有相同 ID 的新记录,我得到了IntegrityError预期的结果。如果我然后尝试在该数据库上运行任何其他查询命令,则会得到InternalError上述结果。
这不会发生在 sqlite 数据库中。
我已经重新安装了 peewee 和 psycopg2,但无济于事。
我错过了什么?