我正在运行nosetests,它具有需要加载与生产数据库不同的数据库的设置功能.我正在使用的ORM是peewee,它要求在定义中设置模型的数据库.
所以我需要设置一个条件变量,但我不知道使用什么条件来检查nosetest是否正在运行该文件.
我对堆栈溢出阅读,你可以检查nose的sys.modules,但我不知道是否有检查鼻涕更精确的方式.
我正在使用peewee作为ORM并且有两个这样的类:
class A(Model):
name = CharField()
body = TextField()
class B(Model):
title = CharField()
body = TextField()
Run Code Online (Sandbox Code Playgroud)
我想从获取的所有条目A和B它的title/ name有像一些字符开头'abc'.根据文档,|操作员应该提供帮助,但我甚至无法执行结果Expression.很显然,我想有一个UNION和AS表达幕后.我怎么通过peewee得到这个?
我正在使用Peewee进行我正在进行的项目,我正在试图弄清楚如何动态设置数据库,以便我可以使用一个用于生产,一个用于测试.我见过的所有例子在任何类之外都有以下行:
database = SqliteDatabase(DATABASE)
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪,因为我认为你会希望它在一个类中,所以你可以传入不同的数据库路径.有关为prod和另一个数据库选择一个数据库进行测试的建议吗?
谢谢!
我试图在Peewee中查询应该具有特定子字符串的结果.
例如,如果我只想在名称中包含"Physics"的活动:
schedule = Session.select().join(Activity).where(Activity.name % "%Physics%").join(Course).join(StuCouRel).join(Student).where(Student.id == current_user.id)
Run Code Online (Sandbox Code Playgroud)
上面的示例没有给出任何错误,但无法正常工作.
在python中,我会这样做if "Physics" in Activity.name,所以我正在寻找一个可以在查询中使用的等价物.
我在Python中使用Peewee库,我想检查是否存在查询.我不想创建一个记录,如果它不存在,所以我不想使用get_or_create.必须有一个更好的解决方案,而不是使用try/except with get但我没有看到任何东西.如果有更好的方法,请告诉我.谢谢.
是否有一种简单的单行方式peewee在Python中使用,如果主键不存在则插入记录,或者如果记录已经存在则更新记录.
目前我正在使用代码:
try:
sql_database.create(record_key = record_key, record_data_2 = record_data_2)
except IntegrityError: ## Occurs if primary_key already exists
sql_database.update(record_key = record_key, record_data_2 = record_data_2)
Run Code Online (Sandbox Code Playgroud)
我看不到"创建或更新"命令,但也许我错过了一些东西.
我试图绕过Tornado和异步连接到Postgresql.我找到了一个可以在http://peewee-async.readthedocs.io/en/latest/上执行此操作的库.
我设计了一个小测试来比较传统的Peewee和Peewee-async,但不知何故异步工作得更慢.
这是我的应用:
import peewee
import tornado.web
import logging
import asyncio
import peewee_async
import tornado.gen
import tornado.httpclient
from tornado.platform.asyncio import AsyncIOMainLoop
AsyncIOMainLoop().install()
app = tornado.web.Application(debug=True)
app.listen(port=8888)
# ===========
# Defining Async model
async_db = peewee_async.PooledPostgresqlDatabase(
'reminderbot',
user='reminderbot',
password='reminderbot',
host='localhost'
)
app.objects = peewee_async.Manager(async_db)
class AsyncHuman(peewee.Model):
first_name = peewee.CharField()
messenger_id = peewee.CharField()
class Meta:
database = async_db
db_table = 'chats_human'
# ==========
# Defining Sync model
sync_db = peewee.PostgresqlDatabase(
'reminderbot',
user='reminderbot',
password='reminderbot',
host='localhost'
)
class SyncHuman(peewee.Model):
first_name = peewee.CharField() …Run Code Online (Sandbox Code Playgroud) 假设我有一个对象模型A,它与Peewee中的B有一对多的关系,使用sqlite后端.我想获取一些A并使用最新的B加入每个.他们是否可以在没有循环的情况下执行此操作?
class A(Model):
some_field = CharField()
class B(Model):
a = ForeignKeyField(A)
date = DateTimeField(default=datetime.datetime.now)
Run Code Online (Sandbox Code Playgroud)
天真的方式是调用order_by和limit(1),但这将适用于整个查询,所以
q = A.select().join(B).order_by(B.date.desc()).limit(1)
Run Code Online (Sandbox Code Playgroud)
自然会产生单身人士的结果
q = B.select().order_by(B.date.desc()).limit(1).join(A)
Run Code Online (Sandbox Code Playgroud)
我要么使用prefetch错误,要么它不适用于此,因为
q1 = A.select()
q2 = B.select().order_by(B.date.desc()).limit(1)
q3 = prefetch(q1,q2)
len(q3[0].a_set)
len(q3[0].a_set_prefetch)
Run Code Online (Sandbox Code Playgroud)
根据需要,这些集合都不具有长度1.有谁知道如何做到这一点?
我需要将所有数据从 SQL 表传输到 html 页面。在 SQLAlchemy 中我会做这样的事情:
class Author(db.Model):
id = db.Column(db.Integer, primary_key=True)
first = db.Column(db.String(80))
last = db.Column(db.String(80))
@app.route('/authors')
def get_authors():
authors = Author.query.all()
# Serialize the queryset
result = authors_schema.dump(authors)
return jsonify({'authors': result.data})
Run Code Online (Sandbox Code Playgroud)
有没有类似authors = Author.query.all()peewee的东西?
我想定义一个表名是gobang_server的表,我写的代码如下:
class BaseModel(Model):
class Meta:
database = database
class GobangServer(BaseModel):
time = DateField(default=datetime.datetime.now())
name = CharField(max_length=64)
host = CharField(max_length=30)
port = IntegerField()
pid = IntegerField()
Run Code Online (Sandbox Code Playgroud)
但我看 PostgreSQL 的表名是“gobangserver”?
我如何定义表名是 gobang_server 并且类名不被修改。