我试图让这个代码与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)
但得到了相同的结果
我究竟做错了什么?
谢谢.
我希望能够加入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) 我正在尝试使用peewee python ORM实现多对多场景,我想要一些单元测试.Peewee教程很棒,但它假设数据库是在模块级定义的,然后所有模型都在使用它.我的情况不同:我没有源代码文件(来自python的观点的模块)和我明确运行的测试,我使用nose从该文件收集测试并运行它们.
如何仅将自定义数据库用于测试中实例化的模型(由鼻子运行)?我的目标是仅使用内存数据库进行测试,以加快测试过程.
我尝试与 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 安装库?
我使用peewee定义了很多模型类.ClassName.create_table()可以生成表,但只能生成一个表.如何使用单个语句创建所有表?
我有一个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) 我试图使用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字段的值?
有没有办法如何在使用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.id是None,我可以得到的唯一属性上述规定.我可以打电话给select()方法但是那里有没有更快的方法?
谢谢
我正在使用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 ×10
python ×8
orm ×5
mysql ×2
mysql-python ×2
sql ×2
foreign-keys ×1
join ×1
python-2.7 ×1
sqlite ×1