标签: peewee

如何使用PeeWee将选择查询转换为pandas DataFrame

使用PeeWee ORM我有以下查询:

query = DataModel.select()where(DataModel.field == "value")
Run Code Online (Sandbox Code Playgroud)

有没有办法转换query成pandas DataFrame而不迭代所有的值?我正在寻找一种更"Pythonic"的方式来做到这一点.

python-2.7 pandas peewee

6
推荐指数
3
解决办法
2193
查看次数

Python Flask:AttributeError:“NoneType”对象没有属性“is_active”

使用Flask Mega 教程我正在尝试学习 Flask。在本教程的第 5 部分中,我现在正在构建一个需要用户登录的个人资料页面。

由于我使用 peewee ORM 而不是 SQLAlchemy,因此我确实在这里或那里调整了代码,但对于这种情况,我认为这并不重要。我现在使用我的 Google (openID) 帐户登录并遇到错误,提示AttributeError: 'NoneType' object has no attribute 'is_active'。该错误发生在该函数末尾的行中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).first()

    if user is None:
        nickname = resp.nickname
        if nickname is None or nickname == "":
            nickname = resp.email.split('@')[0]
        User(nickname = nickname, email = resp.email, role = …
Run Code Online (Sandbox Code Playgroud)

python attributes attributeerror flask peewee

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

使用 SQLite 和 Peewee 进行并发写入

我计划使用 SQLite 和 Peewee (ORM) 来实现轻型内部 Web 服务(每秒<20 个请求)。Web 服务可以处理多个线程上的多个并发请求。在每次请求期间,数据库都会被读取和写入。这意味着我需要具备并发读取和写入的能力。如果数据在读取和写入之间发生变化,对于该应用程序来说并不重要。

SQLite FAQ说允许并发读取,但来自多个线程的并发写入需要获取文件锁。我的问题是:Peewee 是否会为我处理这种锁定,或者我需要在代码中做些什么才能实现这一点?

Peewee 数据库对象在线程之间共享。我认为这意味着数据库连接也是共享的。

我找不到 Peewee 对此的具体答案,所以我在这里问。

python sqlite concurrency multithreading peewee

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

为什么 .count() 在使用 | 进行 peewee 查询时返回错误的数字 (联盟)?

下面的前三个查询返回正确的数字,而最后一个查询返回错误的数字。它应该返回 153,而不是返回 8193。我不知道这个数字来自哪里。

迭代查询正确返回 153 条记录。

>>> Project.select().where(Project.number.between('2012-01', '2012-02')).count()
75
>>> Project.select().where(Project.number.between('2012-02', '2012-03')).count()
78
>>> Project.select().where(Project.number.between('2012-01', '2012-03')).count()
153
>>> (Project.select().where(Project.number.between('2012-01', '2012-02')) | 
     Project.select().where(Project.number.between('2012-01', '2012-03'))).count()
8193
Run Code Online (Sandbox Code Playgroud)

编辑

这是一个从空数据库开始重现问题的函数。

def test(self):

    db = peewee.SqliteDatabase('test.db', check_same_thread=False)

    class Test(peewee.Model):
        num = peewee.IntegerField()
        class Meta:
            database = db

    Test.drop_table(True)
    Test.create_table(True)

    for i in range(1, 11):
        Test.create(num=i)

    q = Test.select().where(Test.num > 6) | Test.select().where(Test.num > 7)

    print(q)

    print('Count =', q.count())

    for i in q:
        print(i.num)
Run Code Online (Sandbox Code Playgroud)

这是它的输出。它表明迭代正确返回 4 个项目,但计数错误:

<class 'DocFinder.DocFinder.DocFinder.test.<locals>.Test'> SELECT t2."id", t2."num" FROM "test" AS …
Run Code Online (Sandbox Code Playgroud)

python sqlite peewee

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

如何从peewee获取sql查询?

简单的 peewee 示例:带有自动增量“id”和字符字段“name”的 MySQL 数据库“Pet”。

正在做

my_pet = Pet.select().where(name == 'Garfield')
Run Code Online (Sandbox Code Playgroud)

使用 .sql() 我们得到 sql 解释。

如何从以下位置获取原始 sql 查询:

my_pet = Pet.get(name='Garfield')
Run Code Online (Sandbox Code Playgroud)

?

python python-3.x peewee

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

Peewee ORM - 将多个数据库中的数据复制到一个主数据库中

我想从多个数据库复制数据,处理它们,然后将它们移动到主数据库。所有数据库都具有相同的架构。

即使我打开和关闭数据库,peewee 总是连接到同一个数据库(列表中的第三个)并且不遵守连接顺序。

databases = [spie_db, opticsorg_db, phcom_db]


# map to a dictionary the values from the record
def mapping(record):
    comp_d = {'name': record.name,
              'address': record.address,
              'country': record.country,
              'website': record.website,
              'domain':  record.domain
              }
    return comp_d


def merge_data():
    company_list = []
    for database in databases:
        database.connect()
        # cycle trough db
        for record in Company.select():
            # append each record to the list
            company_list.append(mapping(record))
        database.close()
    return company_list


# get data from the other databases
companies = merge_data()
# the merge database
db.connect()
# …
Run Code Online (Sandbox Code Playgroud)

python database sqlite python-3.x peewee

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

如何从 Peewee 中的批量插入中获取 ID?

如何ids从 Peewee 中的批量插入中获取?

我需要返回插入的 id 来创建一个新的 dict 数组,如下所示:

a = [{"product_id": "inserted_id_1", "name": "name1"}, {"product_id": "inserted_id_2", "name": "name1"}]
Run Code Online (Sandbox Code Playgroud)

然后我需要使用批量插入它,例如:

ids = query.insertBulk(a)
Run Code Online (Sandbox Code Playgroud)

反过来,最后一个查询应该返回我的新 ID 以进行进一步的类似插入。

python python-3.x peewee flask-peewee

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

如何初始化 peewee.Model 对象?__init__() 不起作用

我无法使用通常的init () 方法初始化“peewee.Model”后代对象的字段。我该如何初始化?

import peewee

peewee_database = peewee.SqliteDatabase('example.db')

class Config():

    def __init__(self, seats, cylinders):
        self.seats = seats
        self.cylinders = cylinders

class Car(peewee.Model):

    magic_number = peewee.IntegerField()
    color = peewee.TextField()

    class Meta:
        database = peewee_database

    def __init__(self, config):
        self.magic_number = config.seats / config.cylinders
        self.color = None

peewee_database.connect()
peewee_database.create_tables([Car])

config = Config(7, 6)
car = Car(config)
car.color = "blue"
car.save()
Run Code Online (Sandbox Code Playgroud)

在 Python3 中产生此错误:

  File "test.py", line 27, in <module>
    car = Car(config)
  File "test.py", line 20, in __init__
    self.magic_number = config.seats / …
Run Code Online (Sandbox Code Playgroud)

python peewee

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

查找 PyMySQL 错误的来源 - err.InterfaceError("(0, '')")

我是一名 Discord 机器人开发人员,最近完成了一个订单。客户端在其服务器上设置应用程序时最初没有问题,但根据他们的说法,在运行“大约三个小时”后,程序开始吐出特定的堆栈跟踪错误并且不再接受命令。

该机器人使用 Discord.py 构建,并使用 Peewee 作为 ORM,使用 PyMySQL 作为数据库驱动程序。客户端运行它的服务器由 DigitalOcean 托管,如果需要有关硬件等的任何信息,客户端可以根据请求向我提供该信息。我们已经尝试卸载并重新安装所有依赖项,以及尝试它们的不同发行版,但错误仍然存​​在。

这是客户端正在接收的确切跟踪:

  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2666, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 179, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.6/dist-packages/peewee.py", line 2875, in execute_sql
    cursor.execute(sql, params or ())
  File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 170, in execute
    result = self._query(query)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/cursors.py", line 328, in _query
    conn.query(q)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 516, in query
    self._execute_command(COMMAND.COM_QUERY, sql)
  File "/usr/local/lib/python3.6/dist-packages/pymysql/connections.py", line 750, in _execute_command
    raise err.InterfaceError("(0, '')")
peewee.InterfaceError: (0, '')
Run Code Online (Sandbox Code Playgroud)

我的 database.py 文件中的相关部分,其中打开了数据库连接: …

python-3.x peewee pymysql digital-ocean discord.py

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

Python Peewee 中同一个表的外键

我在 Python 中使用 ORM peewee来实现 sqlite。我想创建一个表,其中的Item字段parent_id将作为外键Item

from peewee import *

db = SqliteDatabase("data.db")

class Item(Model):
    id = AutoField()
    parent_id = ForeignKeyField(Item, null = True)

    class Meta:
        database = db

db.create_tables([Item])
Run Code Online (Sandbox Code Playgroud)

但是,由于循环外键,出现错误:

NameError:在封闭范围内赋值之前引用了自由变量“Item”

DeferredForeignKey对于这种情况, peewee中有:

from peewee import *

db = SqliteDatabase("data.db")

class Item(Model):
    id = AutoField()
    parent_id = DeferredForeignKey("Item", null = True)

    class Meta:
        database = db

db.create_tables([Item])
Item._schema.create_foreign_key(Item.parent_id)
Run Code Online (Sandbox Code Playgroud)

不幸的是,sqlite中没有ADD CONSTRAINT,所以出现另一个错误:

peewee.OperationalError:靠近“CONSTRAINT”:语法错误

有没有办法使用 peewee 在 sqlite 中创建循环外键,或者我必须使用纯整数而不是外键或使用本机 SQL 而不是 ORM?

python database sqlite foreign-keys peewee

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