list_of_ids = "23,55,11,24"
job = Job.select().join(User).where(Job.id IN (list_of_ids))
Run Code Online (Sandbox Code Playgroud)
我想获取属于特定用户的所有作业,其中作业 ID 与list of ids提供的匹配。但是,我不断收到语法错误,并且在 Peewee 网站上找不到任何相关文档。
我希望能够在提供的 ID 列表上执行更新和删除操作。
如果 Peewee 能让我插入一个 SQL 字符串就好了。我只会做
SELECT job.name FROM user INNER JOIN job ON user.id = job.id
WHERE job.id IN (23,55,11,24)
Run Code Online (Sandbox Code Playgroud) 我刚刚开始在python中使用peewee。但是当我使用 .save() 函数保存表数据时。线路中有错误。并且控制不会转到下一行。
只是想知道如何知道错误是什么。虽然我已经缩小到下面的行
try:
with database.transaction():
driver = Driver()
driver.person = person
driver.qualification = form.getvalue('qualification')
driver.number = form.getvalue('phone')
driver.license = form.getvalue('issu')
driver.audited_by = 0
print "this line prints"
driver.save()
print "this one does not print"
print "Success"
except:
print "Error"
Run Code Online (Sandbox Code Playgroud)
我使用了打印语句,我能够找出 driver.save() 行中的错误。但是如何检查错误究竟是什么?
我正在开发一个线程应用程序,其中一个线程将提供Queue要修改的对象,然后许多其他线程将从队列中读取,进行修改并保存更改。
该应用程序不需要很多并发,所以我想坚持使用 SQLite 数据库。这是一个说明该应用程序的小示例:
import queue
import threading
import peewee as pw
db = pw.SqliteDatabase('test.db', threadlocals=True)
class Container(pw.Model):
contents = pw.CharField(default="spam")
class Meta:
database = db
class FeederThread(threading.Thread):
def __init__(self, input_queue):
super().__init__()
self.q = input_queue
def run(self):
containers = Container.select()
for container in containers:
self.q.put(container)
class ReaderThread(threading.Thread):
def __init__(self, input_queue):
super().__init__()
self.q = input_queue
def run(self):
while True:
item = self.q.get()
with db.execution_context() as ctx:
# Get a new connection to the container object:
container = Container.get(id=item.id)
container.contents …Run Code Online (Sandbox Code Playgroud) 两种情况:
1.) 我想定义一个只能取整数 0、1 或 2 的属性 (val)。
class Trinary(Model):
"""val should accept the values 0, 1 or 2 only"""
val = IntegerField()
Run Code Online (Sandbox Code Playgroud)
2.) 我想定义一个只能接受特定字符串的属性 (val),例如 ["strawberry", "peach", "apple"]
class Fruit(Model):
"""val should accept the values "strawberry", "peach" or "apple" only """
val = ???
Run Code Online (Sandbox Code Playgroud)
是否可以使用 peewee 实现这样的限制?
谢谢你的帮助!
莫夫
我打算用 PeeWee 进行测试,我发现了一个大问题。例子 :
from uuid import uuid4
import datetime as dt
import time
from peewee import *
dbfile = 'test.db'
db = SqliteDatabase(dbfile)
class BaseModel(Model):
class Meta:
database = db
class Example(BaseModel):
uuid = CharField(default=str(uuid4()))
date = DateTimeField(default=dt.datetime.now())
try:
Example.create_table()
except:
pass
e1 = Example.create()
time.sleep(1)
e2 = Example.create()
print(e1.uuid, e2.uuid) #Same uuid...
print(e1.date, e2.date) #Same date
Run Code Online (Sandbox Code Playgroud)
在这段代码中,uuid 和 date 是相同的,这是不正常的。为什么以及如何将其更改为每个新创作的不同价值?
谢谢
对于上下文:我正在编写一个脚本来进行数据库迁移。
想要根据实际表检查模型以查看所有字段是否存在。
或者想要检查表中是否存在特定列(字段)。
我可以看到http://docs.peewee-orm.com/en/latest/peewee/api.html#Model.table_exists存在,所以我正在寻找字段的推论。
提前致谢!
我一直在尝试执行原始查询并将其映射到字典。
虽然execute_sql不返回列名,但返回元组。
我使用原始查询,但它返回 None Abc 实例
class Abc(BaseModel):
name = CharField()
engine = CharField()
q = Abc.raw('show table status from ' + config.DB['name'])
print(list(q.execute()))
Run Code Online (Sandbox Code Playgroud)
输出:
[<Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>, <Abc: None>]
Run Code Online (Sandbox Code Playgroud)
sql的结果
使用mysql(newbie)处理python和Django项目试图弄清楚是否更喜欢在Django表单中的python数据库部分和Django模型中使用peewee,或者继续使用Django进行整个事情
相关答案声称Django开销很高但无法找到该假设的基础
谢谢,西蒙
我们有一个db.py定义了 peewee 数据库的文件:
db = PostgresqlExtDatabase('mom',
user=DB_CONFIG['username'],
password=DB_CONFIG['password'],
host=DB_CONFIG['host'],
port=DB_CONFIG['port'],
threadlocals=True,
register_hstore=False,
autocommit=True,
autorollback=True,
cursor_factory=DictCursor)
Run Code Online (Sandbox Code Playgroud)
调用db.execute("SOME RAW SQL UPDATE QUERY")按预期工作。但是begin在此之前调用 a并不会阻止数据库被修改。
db.begin()
db.execute("SOME RAW SQL UPDATE QUERY") # <- Does not wait, db is updated immediately here
db.commit()
Run Code Online (Sandbox Code Playgroud)
我这样做对吗?
如果一个事务已经在进行中,我基本上需要将原始 sql 嵌套在一个事务中,否则如果没有begin调用任何事务,则立即执行它。
这工作,如果我做的预期db.set_autocommit(False),然后execute_sql再commit()。
它也适用于atomic()上下文管理器。
给予一定的情况下,我工作的一个Web应用程序,物流,和我们的代码库使用瓶和SQLAlchemy的scoped_session使用autocommit设置为true。它不使用SQLAlchemy的ORM(因为..历史原因),而是只使用Session对象和它的
execute(),begin(),begin_nested(),rollback()和remove()方法。
它的实现方式是Session = …
我在烧瓶项目中使用 Peewee 进行 MySQL 连接。我想知道是否可以在模型的方法中进行查询。这将使路由代码更清晰,例如:
人物.py:
from peewee import *
db = SqliteDatabase('people.db')
class Person(Model):
name = CharField()
birthday = DateField()
is_relative = BooleanField()
class Meta:
database = db # This model uses the "people.db" database.
def getPersonByName(name):
#logic to get persons by name
#return result
Run Code Online (Sandbox Code Playgroud)
服务器.py:
.
.
.
@app.route('/<name>')
def index(name):
persons = Person.getPersonByName(name)
return render_template('names.html', persons=persons)
Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的设置、pipenv Flask 环境中的模型和 api 文件。我目前正在使用 peewee,并面临着从数据表获取所有结果的问题。我以前在 python 中做过这个并且工作得很好,但是不确定在 Flask 中我做错了什么。这是我的模型
from peewee import *
import peewee as pw
db = pw.MySQLDatabase('xxxxx', host="localhost", port=3306, user='xxx',
password="xxxxx")
class HomeCarousel(Model):
icon = pw.CharField(100)
header = pw.CharField(50)
text = pw.CharField(100)
class Meta:
database = db
Run Code Online (Sandbox Code Playgroud)
这是我的 api 文件
from flask import Flask, g
from flask import jsonify, make_response
from playhouse.shortcuts import model_to_dict
from peewee import *
import peewee as pw
from models import *
from flask_cors import CORS
app = Flask(__name__)
cors = CORS(app, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用字符串动态分配类名.
很像这样......
classname='cats'
class classname(peewee.Model):
Run Code Online (Sandbox Code Playgroud)
Peewee似乎并不认为我应该能够做到这一点,并且我在寻找一种动态定义类名的方法时遇到了很多麻烦.
救命!
peewee ×12
python ×10
mysql ×4
flask ×2
python-3.x ×2
sqlite ×2
django ×1
flask-peewee ×1
python-2.7 ×1
session ×1
sqlalchemy ×1
try-catch ×1