标签: peewee

python peewee - 如何使用distinct

我试图让这个代码与peewee一起工作:

distinct_list = QSales.select(QSales.account, QSales.tax_code).distinct().where(QSales.trans_num == 3717)
print distinct_list
Run Code Online (Sandbox Code Playgroud)

但是打印命令结果是:

<class '__main__.QSales'> SELECT DISTINCT t1.`Account`, t1.`Tax_Code` FROM `q_sales` AS t1 WHERE (t1.`Trans_#` = %s) [3717]
Run Code Online (Sandbox Code Playgroud)

在MySQL编辑器中运行上面的select语句(将打印结果复制到编辑器)返回正确的结果.

我也尝试过:

distinct_list = QSales.select(fn.Distinct(QSales.account, QSales.tax_code)).where(QSales.trans_num == 3717)
Run Code Online (Sandbox Code Playgroud)

但得到了相同的结果

我究竟做错了什么?

谢谢.

python-2.7 peewee

11
推荐指数
1
解决办法
6674
查看次数

Python peewee加入了多个表

我希望能够加入peewee中的多个表格.然而,这个场景对于我弄清楚如何使它与peewee一起工作有点困难.

我有以下表格:

Ticket TicketCategory TicketBooking活动

这是我的模特:

class TicketCategory(BaseModel):
    venue_id = IntegerField()
    name = CharField()
    description = CharField()

class Ticket(BaseModel):
    event = ForeignKeyField(Event)
    category = ForeignKeyField(TicketCategory)
    order_number = IntegerField()
    tier_name = CharField()
    num_available = IntegerField()
    price = DecimalField()

class TicketBooking(BaseModel):
    user_id = IntegerField()
    ticket = ForeignKeyField(Ticket, related_name="ticketbookings")
    price_paid = DecimalField()
    created = DateTimeField()
    deleted = DateTimeField()

class Event(BaseModel):
    venue_id = IntegerField()
    date = DateField()
    event_image_url = CharField()
    start = TimeField()
    end = TimeField()
Run Code Online (Sandbox Code Playgroud)

现在我想运行一个查询,它将选择给定用户的所有票证.运行我的连接后,我希望加载所有信息 - 我不希望在访问ticketbooking.ticket.category.name或ticketbooking.ticket.event.description时启动另一个查询

我不能这样做:

return TicketBooking.select(TicketBooking, Ticket, TicketCategory, …
Run Code Online (Sandbox Code Playgroud)

python join foreign-keys peewee

11
推荐指数
1
解决办法
8820
查看次数

使用peewee ORM对代码进行单元测试的自定义sqlite数据库

我正在尝试使用peewee python ORM实现多对多场景,我想要一些单元测试.Peewee教程很棒,但它假设数据库是在模块级定义的,然后所有模型都在使用它.我的情况不同:我没有源代码文件(来自python的观点的模块)和我明确运行的测试,我使用nose从该文件收集测试并运行它们.

如何仅将自定义数据库用于测试中实例化的模型(由鼻子运行)?我的目标是仅使用内存数据库进行测试,以加快测试过程.

python sqlite peewee

10
推荐指数
3
解决办法
4322
查看次数

Python peewee.ImproperlyConfigured:未安装 MySQL 驱动程序

我尝试与 peewee 建立 MySQL 连接,并按照他们网站上的教程进行操作: peewee 快速入门

所以我的代码如下:

from peewee import *

db = MySQLDatabase(
    host='127.0.0.1',
    user='root',
    password='',
    database='db_test'
)

class Person(Model):
    name = CharField()
    birthday = DateField()

    class Meta:
        database = db

class Pet(Model):
    owner = ForeignKeyField(Person, backref='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db

db.connect()

db.create_tables([Person, Pet])

db.close()
Run Code Online (Sandbox Code Playgroud)

(我的数据库来自xampp)

但是当我执行此代码时,我收到此错误消息:

peewee.ImproperlyConfigured:MySQL 驱动程序未安装!

我尝试通过安装 MySQL 驱动程序来解决此问题。但这完全没有改变。由于我是 python 新手,我不知道如何解决这个问题,如果我只是缺少导入或者我必须使用 pip 安装库?

python mysql-python peewee

10
推荐指数
2
解决办法
1万
查看次数

如何使用peewee创建模型中定义的所有表

我使用peewee定义了很多模型类.ClassName.create_table()可以生成表,但只能生成一个表.如何使用单个语句创建所有表?

python orm peewee

9
推荐指数
3
解决办法
5513
查看次数

在超时时重新连接MySQL

我有一个Python程序,它在后台运行数周,并且每隔一段时间就进行一次数据库查询.为此,我使用ORM peewee(版本2.2.1).我MySQL用作后端.

最近我遇到了访问数据库的反复出现的问题,通常是在运行程序几天之后.引起的错误peewee

peewee.OperationalError: (2006, 'MySQL server has gone away')
Run Code Online (Sandbox Code Playgroud)

追溯是深入的peewee.我在这里发布,但由于我的virtualenv文件名太长,我缩短它们:

  File ".../local/lib/python2.7/site-packages/peewee.py", line 2910, in save
    ret_pk = self.insert(**field_dict).execute()
  File ".../local/lib/python2.7/site-packages/peewee.py", line 2068, in execute
    return self.database.last_insert_id(self._execute(), self.model_class)
  File ".../local/lib/python2.7/site-packages/peewee.py", line 1698, in _execute
    return self.database.execute_sql(sql, params, self.require_commit)
  File ".../local/lib/python2.7/site-packages/peewee.py", line 2232, in execute_sql
    self.commit()
  File ".../local/lib/python2.7/site-packages/peewee.py", line 2104, in __exit__
    reraise(new_type, new_type(*exc_value.args), traceback)
  File ".../local/lib/python2.7/site-packages/peewee.py", line 2223, in execute_sql
    res = cursor.execute(sql, params or ())
  File ".../local/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, …
Run Code Online (Sandbox Code Playgroud)

python mysql orm mysql-python peewee

9
推荐指数
2
解决办法
9364
查看次数

Python peewee - 从多个表中选择

我试图使用peewee从单独的表中选择两个字段.我相信我的问题是迭代结果对象.

我在Python中有以下代码:

sHeader_Value = (System_Headers
  .select(System_Headers.SystemHeader_Name, System_Data.System_Value)
  .join(System_Header_Link)
  .join(System_Data_Link)
  .join(System_Data))
Run Code Online (Sandbox Code Playgroud)

该代码生成以下SQL:

SELECT t1.`SystemHeader_Name`, t4.`System_Value` 
FROM `system_headers` AS t1
INNER JOIN `system_header_link` AS t2 ON (t1.`SystemHeader_ID` = t2.`SystemHeader_ID`) 
INNER JOIN `system_data_link` AS t3 ON (t2.`SystemHeaderLink_ID` = t3.`SystemHeaderLink_ID`)
INNER JOIN `system_data` AS t4 ON (t3.`SystemData_ID` = t4.`SystemData_ID`)
Run Code Online (Sandbox Code Playgroud)

在MySQL Workbench中执行它我得到一个包含两个字段的表:SystemHeader_Name, System_Value.

我正在试图弄清楚如何System_Value从查询包装器中获取.如果我执行以下操作:

for s in sHeader_Value:
  print s.SystemHeader_Name, s.System_Value
Run Code Online (Sandbox Code Playgroud)

我被提出一个AttributeError,说明了'System_Headers' object has no attribute 'System_Value'.

请注意,如果我只是尝试这样做print s.SystemHeader_Name,它会完美无缺地执行.

如何捕获System_Value字段的值?

python mysql sql orm peewee

8
推荐指数
1
解决办法
3954
查看次数

Python-peewee获得最后保存的行

有没有办法如何在使用peewee及其所有属性的同时获取数据库中最后保存的行?假设我这样做:

user = User.create(
    email = request.json['email'],
    nickname = request.json['nickname'],
    password = request.json['password'],
    salt = "salt"
)
Run Code Online (Sandbox Code Playgroud)

user.idNone,我可以得到的唯一属性上述规定.我可以打电话给select()方法但是那里有没有更快的方法?

谢谢

python orm peewee

8
推荐指数
2
解决办法
5011
查看次数

使用peewee在具有不同名称的字段上联合

我正在使用peewee作为ORM并且有两个这样的类:

class A(Model):
    name = CharField()
    body = TextField()

class B(Model):
    title = CharField()
    body = TextField()
Run Code Online (Sandbox Code Playgroud)

我想从获取的所有条目AB它的title/ name有像一些字符开头'abc'.根据文档,|操作员应该提供帮助,但我甚至无法执行结果Expression.很显然,我想有一个UNIONAS表达幕后.我怎么通过peewee得到这个?

python sql orm peewee

8
推荐指数
1
解决办法
273
查看次数

如何在Peewee中动态设置SQLite数据库文件?

我正在使用Peewee进行我正在进行的项目,我正在试图弄清楚如何动态设置数据库,以便我可以使用一个用于生产,一个用于测试.我见过的所有例子在任何类之外都有以下行:

database = SqliteDatabase(DATABASE)
Run Code Online (Sandbox Code Playgroud)

我觉得很奇怪,因为我认为你会希望它在一个类中,所以你可以传入不同的数据库路径.有关为prod和另一个数据库选择一个数据库进行测试的建议吗?

谢谢!

peewee

8
推荐指数
2
解决办法
1460
查看次数

标签 统计

peewee ×10

python ×8

orm ×5

mysql ×2

mysql-python ×2

sql ×2

foreign-keys ×1

join ×1

python-2.7 ×1

sqlite ×1