我需要将所有数据从 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 并且类名不被修改。
为了使扩展看起来很干净,我试图在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) 我正在尝试使用带瓶的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 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) 我有以下代码,用于查询我的 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) 我一直在寻找 的源代码peewee,特别Model是该update函数:https://github.com/coleifer/peewee/blob/a33e8ccbd5b1e49f0a781d38d40eb5e8f344eee5/peewee.py#L4718
我不喜欢这样的事实:如果语句未与子句正确耦合,则任何更新操作都会影响模型中的每一行,可以从行实例调用此方法where。因此,我想找到某种方法来禁止从模型实例调用此类方法。
一些谷歌搜索让我相信这可能相当困难。delattr从__init__似乎没有工作。从 update 函数运行isclass(self)总是返回 True,因为当我们在类方法内部时,我们实际上是类而不是实例。
有什么建议么?
使用PeeWee ORM我有以下查询:
query = DataModel.select()where(DataModel.field == "value")
Run Code Online (Sandbox Code Playgroud)
有没有办法转换query成pandas DataFrame而不迭代所有的值?我正在寻找一种更"Pythonic"的方式来做到这一点.
我正在尝试使用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。搜索周围我想出了这些解决方案:
但我找不到任何如何使用第二个或第三个解决方案的示例。有人可以澄清如何使用案例 2 和 3 吗?
我正在尝试编写一个 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) peewee ×10
python ×8
postgresql ×3
mysql ×2
orm ×2
class ×1
class-method ×1
cpython ×1
flask ×1
interface ×1
pandas ×1
python-2.7 ×1
python-3.x ×1
sql-update ×1
sqlalchemy ×1