使用 peewee 授予权限的推荐方法是什么?

What is recommended way to grant permissions using peewee?

据我从文档中了解到,peewee 可以根据给定的模型创建表格,例如:

database = SqliteDatabase(DATABASE)

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

class User(BaseModel):
    username = CharField(unique=True)

database.connect()
database.create_table(User, safe=True)

但是我还没有发现,推荐的方法是更改​​权限或授予对表的访问权限。我知道我可以像这样简单地执行原始 SQL:

database.execute_sql('GRANT ALL ON TABLE user TO ro_user;')

但是我想知道,是否有better/correct方法可以做到这一点?

不,这是一个很好的方法。 Peewee 不 "natively" 支持创建 GRANT 语句。事实上,我使用过的 ORM 都没有——即使是 SQLAlchemy,它非常有特色 recommends 原始的 SQL 方法。部分原因是不同数据库之间的权限处理和 GRANT 语法差异很大。

所以您使用 Peewee 的 database.execute_sql() 就好了。

要记住的一件事是,如果您想动态指定用户名并且它来自用户输入或不是 100% 可信的来源,您需要正确地转义它(在 PostgreSQL,作为双引号 delimited identifier) 或确保 username.isidentifier() 为 True 或其他内容:

if not username.isidentifier():
    raise ValueError('bad username: {}'.format(username))
database.execute_sql('GRANT ALL ON TABLE user TO {};'.format(username))