我正在使用peewee作为ORM创建API,我需要能够将peewee模型对象转换为JSON对象以发送给用户.有谁知道这样做的好方法?
我正在尝试使用peewee连接到Amazon的RDS上的MySQL数据库,我无法让它工作.我是数据库的新手,所以我可能做了一些愚蠢的事情,但这就是我正在尝试的:
import peewee as pw
myDB = pw.MySQLDatabase(host="mydb.crhauek3cxfw.us-west-2.rds.amazonaws.com",port=3306,user="user",passwd="password",db="mydb")
class MySQLModel(Model):
"""A base model that will use our MySQL database"""
class Meta:
database = myDB
class User(MySQLModel):
username = CharField()
myDB.connect()
Run Code Online (Sandbox Code Playgroud)
它挂在第二行,说 __init__() takes at least 2 arguments (1 given)
我错过了什么?为什么它说我只给它一个参数当我给它五个?
非常感谢,Alex
我希望每次修改记录时更新时间戳字段,就像在MySQL中一样.
DateTimeField(default=datetime.datetime.now())
只会在第一次创建时设置它...
有没有简单的解决方案?唯一的解决方案是在MySQL db中手动设置Column选项吗?
我到处研究过这个,似乎无法找到答案.我希望我没有重复这个(因为这是我关于SO的第一个问题).
我正在尝试用Peewee编写一个选择查询,通常会去... WHERE foo = NULL; 在SQL世界中.
MySQL看起来像这样:
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| user | varchar(30) | NO | | NULL | |
| peer | varchar(30) | NO | | NULL | |
| deleted | date | YES | | NULL | |
| confirmed | date | YES | | NULL | | …
Run Code Online (Sandbox Code Playgroud) 文档显示了如何使用IN
运算符,但我找不到如何使用NOT IN
运算符.
如果我把一个not <<
我得到一个语法错误.
如果我放了not <FieldName> <<
一个WHERE False
而不是一个子查询WHERE (<FieldName> NOT IN (SELECT ...
.
这是带有文档示例的输出.第一个是正确的,第二个和第三个是错误的.
>>> Tweet.select().where(Tweet.user << a_users).sql()
('SELECT t1."id", t1."user_id", t1."message", t1."created_date", t1."is_published" FROM "tweet" AS t1 WHERE (t1."user_id" IN (SELECT t2."id" FROM "user" AS t2 WHERE (Lower(Substr(t2."username", ?, ?)) = ?)))', [1, 1, 'a'])
>>> Tweet.select().where(not Tweet.user << a_users).sql()
('SELECT t1."id", t1."user_id", t1."message", t1."created_date", t1."is_published" FROM "tweet" AS t1 WHERE ?', [False])
>>> Tweet.select().where(Tweet.user …
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习如何使用myse的peewee.
我在具有现有表的mysql服务器上有一个现有的数据库.该表目前是空的(我现在正在测试).
>>> db = MySQLDatabase('nhl', user='root', passwd='blahblah')
>>> db.connect()
>>> class schedule(Model):
... date = DateField()
... team = CharField()
... class Meta:
... database = db
>>> test = schedule.select()
>>> test
<class '__main__.schedule'> SELECT t1.`id`, t1.`date`, t1.`team` FROM `nhl` AS t1 []
>>> test.get()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.6/site-packages/peewee.py", line 1408, in get
return clone.execute().next()
File "/usr/lib/python2.6/site-packages/peewee.py", line 1437, in execute
self._qr = QueryResultWrapper(self.model_class, self._execute(), query_meta)
File "/usr/lib/python2.6/site-packages/peewee.py", …
Run Code Online (Sandbox Code Playgroud) 对于模型
class User(db.Model, BaseUser):
name = CharField()
phone = CharField()
age = IntegerField()
points = IntegerField()
Run Code Online (Sandbox Code Playgroud)
和一个字段列表, lst = ['phone', 'name', 'points']
有没有办法让您的查询返回字段lst
?
我在文档中找不到一个例子,但似乎Django的ORM有类似的东西...get().values(lst)
.
我尝试将列表作为参数传递User.select()
,但得到
TypeError: issubclass() arg 1 must be a class
Run Code Online (Sandbox Code Playgroud)
我想我可以做一些像[getattr(obj, field) for field in lst]
生成的对象,但似乎应该有更好的方法?
更新:values
Django文档中的链接在这里.
我使用Peewee模块作为我项目的ORM.
我阅读了整个文档,没有关于如何处理db.execute_sql()的结果的明确示例.
我跟踪了代码,只能找到db.execute_sql()返回光标.
有谁知道如何处理游标,例如迭代它并从复杂的select语句中获取结果.
更新:我刚从peewee文件夹中找到以下源代码,它应该可以帮我解决这个问题.
class QueryResultWrapper(object): """ Provides an iterator over the results of a raw Query, additionally doing two things: - converts rows from the database into python representations - ensures that multiple iterations do not result in multiple queries """ def __init__(self, model, cursor, meta=None): self.model = model self.cursor = cursor self.__ct = 0 self.__idx = 0 self._result_cache = [] self._populated = False self._initialized = False if meta is not None: self.column_meta, self.join_meta = meta else: self.column_meta …
我正在使用(真棒)Python Peewee ORM作为我的Flask项目,但我现在卡住了尝试用a进行查询where value in ['a', 'b', 'c']
.我尝试按如下方式进行:
MyModel.select().where(MyModel.sell_currency in ['BTC', 'LTC'])
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,它会返回数据库中的所有记录.我有什么想法可以做到这一点?
我试图让这个代码与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 ×10
python ×8
mysql ×3
orm ×2
amazon-rds ×1
create-table ×1
database ×1
flask ×1
isnull ×1
json ×1
null ×1
python-2.7 ×1
select ×1
sql ×1
sqlite ×1