标签: peewee

如何在peewee 2中创建带枚举的表模型?

我正在尝试创建一个模型来描述在peewee中具有枚举字段的.

我在2.0版本之前看到EnumField已经从peewee.py文件中删除了,我在当前的文档中找不到任何概述如何实现它的内容.有谁知道我是否可以使用CharField?

python peewee

5
推荐指数
2
解决办法
3259
查看次数

与peewee和python的外键关系

我正在尝试使用peewee建立数据库ORM,并且不清楚使用外键关系.

from peewee import *

db = SqliteDatabase('datab.db')

class datab(Model):
    class Meta:
        database = db

class Collection(datab):
    identifier = CharField()
    title = CharField()

class File(datab):
    identifier = ForeignKeyField(Collection, related_name='files')
    name = CharField()
Run Code Online (Sandbox Code Playgroud)

后来,我导入了"收藏"

for value in collection:
Collection(**value).save()
Run Code Online (Sandbox Code Playgroud)

最后,我遇到麻烦的地方是将文件添加到集合中

for value in collectionFiles:
    File(**value).save()
Run Code Online (Sandbox Code Playgroud)

在值dict中,有一个带有"identifier"键的关键字对和一个应该与Collection标识符关键字相关联的值.

但是我收到一条错误消息:

ValueError: invalid literal for int() with base 10: 'somevalue'
Run Code Online (Sandbox Code Playgroud)

如果我将File(datab):identifier Type更改为VarChar,它将保存数据.

我意识到我做错了.我的假设是每个表中的唯一标识符值将应用外键.阅读文档后,外观设置看起来有点不同.我需要做些什么吗?

Collections.File.files(**values).save()?换句话说,不是进行数据导入,而是加载集合对象,然后通过peewee添加文件关联字段?

组成类File的值

{'crc32': '63bee49d',
 'format': 'Metadata',
 'identifier': u'somevalue',
 'md5': '34104ffce9e4084fd3641d0decad910a',
 'mtime': '1368328224',
 'name': 'lupi.jpg_meta.txt',
 'sha1': '1448ed1159a5d770da76067dd1c53e94d5a01535',
 'size': '1244'}
Run Code Online (Sandbox Code Playgroud)

python orm peewee

5
推荐指数
1
解决办法
4003
查看次数

如何更改Flask-peewee中的UserDoesNotExist SELECT行为 - python和mysql

我正在使用flask-peewee制作一个API,如果用户不存在于表中,我想返回404 json,但看起来它正在抛出500错误而不是404错误json:

这是我得到的错误:

UserDoesNotExist: instance matching query does not exist:
SQL: SELECT t1.`id`, t1.`username`, t1.`password`, t1.`email`, t1.`token`, t1.`join_date`, t1.`active`, t1.`admin` FROM `user` AS t1 WHERE ((t1.`active` = %s) AND (t1.`username` = %s))
[Wed Sep 18 20:26:24 2013] [error] [client 173.225.41.154] PARAMS: [True, u'fery3']
Run Code Online (Sandbox Code Playgroud)

码:

@app.route('/api/login/',  methods=['POST'])
def authenticate1():
    if request.method == 'POST' and request.form['username']:
        active = User.select().where(User.active==True)
        user2 = User.select().where(User.username==request.form['username']).get()
        try:
            user = active.where(User.username==request.form['username']).get()
        except exceptions:  # includes simplejson.decoder.JSONDecodeError
            return make_response(jsonify( { 'error': 'Bad request' } …
Run Code Online (Sandbox Code Playgroud)

python mysql json flask peewee

5
推荐指数
1
解决办法
2586
查看次数

如何使用peewee limit()?

有了Peewee,我试图使用限制如下:

one_ticket = Ticket.select().limit(1)
print one_ticket.count()
Run Code Online (Sandbox Code Playgroud)

但这打印出5.有人知道这里有什么问题吗?

python sql orm limit peewee

5
推荐指数
1
解决办法
2763
查看次数

AttributeError:'SelectQuery'对象没有属性'is_active'

我正在尝试通过遵循Flask Mega教程来学习Peewee ORM与Flask的结合.在本教程的第5部分中,我使用OpenID创建了一个登录.在克服了一堆障碍之后,我现在在下面的行中粘贴的函数中得到一个AttributeError : login_user(user, remember = remember_me).

@oid.after_login
def after_login(resp):
    if resp.email is None or resp.email == "":
        flash('Invalid login. Please try again.')
        return redirect(url_for('login'))
    user = User.select().where(User.email == resp.email)    
    if user.wrapped_count() == 0:
        nickname = resp.nickname
        if nickname is None or nickname == "":
            nickname = resp.email.split('@')[0]
        user = User(nickname = nickname, email = resp.email, role = models.ROLE_USER)
        user.save()
    remember_me = False
    if 'remember_me' in session:
        remember_me = session['remember_me']
        session.pop('remember_me', None)
    login_user(user, remember …
Run Code Online (Sandbox Code Playgroud)

python attributeerror flask peewee flask-peewee

5
推荐指数
1
解决办法
3308
查看次数

避免表中的冲突列标题加入peewee

我正在尝试使用mysql数据库连接peewee中的两个表.这很容易做到这样的事情:

s = Table1.select(Table1, Table2).join(
        Table2).naive().where(Table1.Title == "whatever")
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在Table1和Table2中调用了一个与"URL"相同的列.然后,当我选择s.URL时,它会给我Table2中的URL,我不想要它,我想要Table1中的那个.有没有办法不加入Table2.URL列或命名它不同的东西?这个问题似乎解决了常规SQL(不是小便)中的类似问题,有没有办法在peewee做类似的事情?

换句话说,我认为我正在寻找peewee中的" JOIN AS"方法或" DON'T JOIN THIS COLUMN"方法.

非常感谢,Alex

mysql alias join peewee

5
推荐指数
1
解决办法
867
查看次数

使用peewee进行多处理的批量插入

我在Python 3.4中使用简单的html scraper,使用peewee作为ORM(很棒的ORM顺便说一句!).我的脚本需要一堆站点,提取必要的数据并将它们保存到数据库中,但是每个站点都在分离过程中被刮掉,以提高性能并保存数据应该是唯一的.不仅在站点之间,而且在特定站点上都可能存在重复数据,因此我只想将它们存储一次.

示例:帖子和类别 - 多对多关系.在抓取过程中,同一类别在不同的帖子中出现多次.我第一次想要将该类别保存到数据库(创建新行).如果相同的类别出现在不同的帖子中,我想将该帖子与db中已创建的行绑定.

我的问题是 - 我是否必须使用原子更新/插入(插入一个帖子,保存,get_or_create类别,保存,将新行插入多对多表,保存)或者我可以以某种方式使用批量插入?这个问题的最快解决方案是什么?也许某些临时表在进程之间共享,这将在工作结束时批量插入?我正在使用MySQL db.

谢谢答案和时间

python mysql bulkinsert multiprocessing peewee

5
推荐指数
1
解决办法
4841
查看次数

peewee模型会自动关闭连接吗?

我正在使用peewee访问SQLite数据库。

我已经model.py喜欢了:

from peewee import *

db = SqliteDatabase('people.db')

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

    class Meta:
        database = db
Run Code Online (Sandbox Code Playgroud)

然后在另一个Python文件(带有import model)中,我使用Person.create()或调用来操纵数据库Person.select(name=='Joe').delete_instance()

快速入门说,在结束时调用db.close()关闭连接。这也适用于我的情况吗?我应该打电话给model.db.close()吗?

python database sqlite peewee

5
推荐指数
2
解决办法
2834
查看次数

如何在单独的模块中管理peewee数据库?

我希望将我的数据库实现放在一个单独的模块或类中.但我正在努力解决一些细节问题.一个简单的例子:

from peewee import *

db = SqliteDatabase(':memory:')

class BaseModel(Model):
    class Meta:
        database = db

class User(BaseModel):
    name = CharField()

db.connect()
db.create_tables([User,])
db.commit()

@db.atomic()
def add_user(name):
    User.create(name=name).save()

@db.atomic()
def get_user(name):
    return User.get(User.name == name)
Run Code Online (Sandbox Code Playgroud)

到目前为止,这工作正常.我可以在这里实现我的数据库接口并将其作为模块导入.

现在我希望能够在运行时选择数据库文件.所以我需要一种方法来定义Model类而不需要先定义SqliteDatabase('somefile').我试图将所有内容封装在一个新的Database类中,稍后我可以从中导入并创建一个实例:

from peewee import *

class Database:

    def __init__(self, dbfile):
        self.db = SqliteDatabase(dbfile)

        class BaseModel(Model):
            class Meta:
                database = self.db

        class User(BaseModel):
            name = CharField()

        self.User = User

        self.db.connect()
        self.db.create_tables([User,])
        self.db.commit()

    @self.db.atomic()    # Error as self is not known on this level
    def …
Run Code Online (Sandbox Code Playgroud)

python database peewee

5
推荐指数
1
解决办法
2480
查看次数

Peewee MySQL服务器已经消失

我用烧瓶和小便.有时peewee会抛出这个错误

MySQL server has gone away (error(32, 'Broken pipe'))
Run Code Online (Sandbox Code Playgroud)

Peewee数据库连接

db = PooledMySQLDatabase(database,**{
            "passwd": password, "user": user,
            "max_connections":None,"stale_timeout":None,
            "threadlocals" : True
        })

@app.before_request
def before_request():
    db.connect()

@app.teardown_request
def teardown_request(exception):
    db.close()
Run Code Online (Sandbox Code Playgroud)

在mysql错误"MySQL服务器已经消失(错误(32,'Broken pipe'))"之后,选择查询工作没有问题,但插入,更新,删除查询不起作用.

在插入,更新,删除查询后面工作(在mysql中)但是peewee抛出这个错误.

(2006, "MySQL server has gone away (error(32, 'Broken pipe'))")
Run Code Online (Sandbox Code Playgroud)

python mysql broken-pipe flask peewee

4
推荐指数
1
解决办法
4046
查看次数