标签: peewee

有没有办法在 peewee 中 query.all() ?

我需要将所有数据从 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的东西?

python orm sqlalchemy peewee

7
推荐指数
2
解决办法
9483
查看次数

如何在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 并且类名不被修改。

postgresql peewee

7
推荐指数
1
解决办法
2420
查看次数

运算符可以作为python中的类方法重载吗?

为了使扩展看起来很干净,我试图在python中实现">>"运算符作为类方法.我不知道怎么回事.我不想创建一个实例,因为我真的在类本身上运行.

>>> class C:
...     @classmethod
...     def __rshift__(cls, other):
...         print("%s got %s" % (cls, other))
...
>>> C.__rshift__("input")
__main__.C got input
>>> C() >> "input"
__main__.C got input
>>> C >> "input"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for >>: 'classobj' and 'str'
Run Code Online (Sandbox Code Playgroud)

背景资料:

我试图在peewee ORM中实现视图(类似于Django).Peewee允许您将数据库表及其关系定义为类,如下所示:

class Track(Model):
    title = CharField()
    artist = ForeignKeyField(Artist)

class Artist(Model):
    name = CharField(unique = True)
    location = ForeignKeyField(Location)

class Location(Model):
    state = CharField(size …
Run Code Online (Sandbox Code Playgroud)

python class operator-overloading peewee

6
推荐指数
1
解决办法
636
查看次数

在Peewee中允许空值

我正在尝试使用带瓶的peewee在MySQL数据库的某些列中允许空值。看着这里的文档我认为那将非常容易。我建立了这样的课程:

class TestClass(MySQLModel):
Title = pw.CharField(null = True)
Run Code Online (Sandbox Code Playgroud)

创建了表并尝试插入一个空值,如下所示:

myDB.connect()
x = TestClass.create(Title = None)   
x.save()
Run Code Online (Sandbox Code Playgroud)

只是让它挂断我并说“ _mysql_exceptions.OperationalError: (1048, "Column 'Title' cannot be null")”。难道我做错了什么?

python mysql peewee

6
推荐指数
1
解决办法
4331
查看次数

“有时”使用 Peewee ORM 在 PostgreSQL 上遇到 InterfaceError

我正在使用 Python Flask 框架和带有 PostgreSQL 9.3的Peewee ORM构建一个网站。到目前为止,一切进展顺利,但我现在遇到了一些麻烦。我有时会得到一个InterfaceError: connection already closed. 我得到它的代码如下:

pendingOrders_q = CustomerOrder\
    .select()\
    .where(CustomerOrder.status == CustomerOrder.STATUS_PENDING)\
    .where(CustomerOrder.expiration < datetime.utcnow())

if len(list(pendingOrders_q)) > 0:
    # do some stuff here..
Run Code Online (Sandbox Code Playgroud)

我知道我计算结果数量的方法非常讨厌,但我不知道其他任何方法。此外,这通常有效,但有时会出现以下错误。我不明白为什么它通常可以正常工作,但有时会出现此错误。有人知道这里发生了什么吗?

  File "/home/kramer65/xs/app/order_management.py", line 210, in checkExpiration
    if len(list(pendingOrders_q)) > 0:
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1988, in __iter__
    return iter(self.execute())
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1981, in execute
    self._qr = ResultWrapper(model_class, self._execute(), query_meta)
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 1698, in _execute
    return self.database.execute_sql(sql, params, self.require_commit)
  File "/usr/local/lib/python2.7/dist-packages/playhouse/postgres_ext.py", line 251, in …
Run Code Online (Sandbox Code Playgroud)

python postgresql orm interface peewee

6
推荐指数
0
解决办法
716
查看次数

peewee 实例匹配查询不存在

我有以下代码,用于查询我的 peewee 数据库。我在具有 term.sets_term_id 的行上的 for 循环中遇到错误。这是错误 TermsDoesNotExist: Instance matching query does not exist: If I do vars(term) then sets_terms_id 是一个选项。为什么我会收到该错误以及如何修复它?

def get_api_response(id):
    response = {}
    print("id is " + str(id))
    try:
        sets = models.Sets.select().where(models.Sets.user_id == id)

    except models.DoesNotExist:
        return json.loads({'error' : 'that set does not exist'})
    else:
        print("it was successful")
        for term in sets:
            print(term.sets_term_id)
Run Code Online (Sandbox Code Playgroud)

这是我的集合和术语模型

class Terms(UserMixin, BaseModel):
    term_id = CharField()
    sets_id = CharField()
    rank = IntegerField()
    term = TextField()
    definition = TextField()

    @classmethod
    def include_term(cls, set_id, term_id, …
Run Code Online (Sandbox Code Playgroud)

python flask peewee

6
推荐指数
1
解决办法
5138
查看次数

如何禁止在实例上调用类方法?

我一直在寻找 的源代码peewee,特别Model是该update函数:https://github.com/coleifer/peewee/blob/a33e8ccbd5b1e49f0a781d38d40eb5e8f344eee5/peewee.py#L4718

我不喜欢这样的事实:如果语句未与子句正确耦合,则任何更新操作都会影响模型中的每一行,可以从行实例调用此方法where。因此,我想找到某种方法来禁止从模型实例调用此类方法。

一些谷歌搜索让我相信这可能相当困难。delattr__init__似乎没有工作。从 update 函数运行isclass(self)总是返回 True,因为当我们在类方法内部时,我们实际上类而不是实例。

有什么建议么?

python cpython class-method peewee

6
推荐指数
1
解决办法
844
查看次数

如何使用PeeWee将选择查询转换为pandas DataFrame

使用PeeWee ORM我有以下查询:

query = DataModel.select()where(DataModel.field == "value")
Run Code Online (Sandbox Code Playgroud)

有没有办法转换query成pandas DataFrame而不迭代所有的值?我正在寻找一种更"Pythonic"的方式来做到这一点.

python-2.7 pandas peewee

6
推荐指数
3
解决办法
2193
查看次数

使用 Peewee 库批量更新

我正在尝试使用Peewee库更新表中的许多记录。在循环内for,我获取一条记录,然后更新它,但这在性能方面听起来很糟糕,所以我需要批量更新。当前代码如下所示:

usernames_to_update = get_target_usernames()
for username in usernames_to_update:
    user = User.get(User.username == username) # username is primary key
    if user.type == 'type_1':
        user.some_attr_1 = some_value_1
    elif user.type == 'type_2':
        user.some_attr_2 = some_value_2
    # elif ....
    user.save()
Run Code Online (Sandbox Code Playgroud)

文档中,有insert_many功能,但没有类似的东西update_many。搜索周围我想出了这些解决方案:

  1. 使用以下命令执行原始查询CASE链接
  2. 使用replace_many链接
  3. 使用update链接

但我找不到任何如何使用第二个或第三个解决方案的示例。有人可以澄清如何使用案例 2 和 3 吗?

python mysql sql-update peewee

6
推荐指数
2
解决办法
5426
查看次数

python multiprocessing + peewee + postgresql 因 SSL 错误而失败

我正在尝试编写一个 Python 模型,该模型能够使用多线程模块和 peewee 在 PostgreSQL 数据库中进行一些处理。

但是,在单核模式下,代码可以工作,但是,当我尝试使用多核运行代码时,我遇到了 SSL 错误。

我想发布我的模型的结构,希望有人可以建议如何以适当的方式设置我的模型。目前,我选择使用面向对象的方法,在该方法中我建立一个在池中共享的连接。为了澄清我所做的,我现在将展示我目前拥有的源代码

我有三个文件:main.py、models.py 和 parser.py。内容如下

models.py 定义了 peewee postgresql 表并连接到 postgres 服务器

import peewee as pw
from playhouse.pool import PooledPostgresqlExtDatabase

KVK_KEY = "id_number"
NAME_KEY = "name"
N_VOWELS_KEY = "n_vowels"

# initialise the data base
database = PooledPostgresqlExtDatabase(
    "testdb", user="postgres", host="localhost", port=5432, password="xxxx",
    max_connections=8, stale_timeout=300 )


class BaseModel(pw.Model):
    class Meta:
        database = database
        only_save_dirty = True


# this class describes the format of the sql data base
class Company(BaseModel):
    id_number = pw.IntegerField(primary_key=True) …
Run Code Online (Sandbox Code Playgroud)

python postgresql multiprocessing python-3.x peewee

6
推荐指数
1
解决办法
1700
查看次数