从独立的python脚本访问postgresql上的django数据库

Posted

技术标签:

【中文标题】从独立的python脚本访问postgresql上的django数据库【英文标题】:Access django database on postgresql from independent python script 【发布时间】:2022-01-17 04:07:46 【问题描述】:

我有一个用 django 和 postgresql 构建的网站。 网站上的每个用户(django Auth 系统中的用户)都有许多帐户模型(和其他模型)。

基于 windows-python 的应用程序需要访问(读/写)数据库中的数据。 每个应用都与特定用户相关联。

我的问题:

    应用程序能否仅访问特定用户数据?帐户模型有一个用户属性,因此它会根据它进行过滤,它如何限制外部应用访问? 从数据库读取/写入的正确方法是什么?我可以像网站一样使用 django 模型吗?

【问题讨论】:

Django 具有 DB 功能:因此您可以为表编写 Python 类并在应用程序中使用实例。 Django 处理剩下的事情。 Here 是一个深入浅出的关于如何使用 Django+PG 的教程。 这不是我的问题。我已经全部运行并设置好了。我想从 django+pg 服务器外部访问数据。来自在 android/Windows 客户端上运行的应用程序。 第一个选项是在 Django 中创建一个 API(也有核心模块)。第二个选项,使用完整的 URL 连接到数据库,例如postgresql://user:passwd@host/mydatabase. 第二个选项授予管理员访问数据库的权限,对吧? can an app access only specific user data? 通常,如果应用程序直接连接到数据库,您不能让用户只访问他们的数据。 SQL 确实有权限,但这些权限非常广泛。例如,您将无法授予用户仅编辑部分表格的权限。通常,您会使用 Django 之类的应用程序服务器来实现对单个用户的访问控制,并且不允许用户直接连接到数据库。 【参考方案1】:

我认为最好的方法是构建一个 API 层来在 Django 和外部之间交换数据。 Django rest 框架提供了一个非常简单的解决方案,可以将 REST 层添加到您的应用程序中,该层也可以与任何其他外部重用。 https://www.django-rest-framework.org/

通过这种方法,您可以集中和抽象 Django 中的直接数据库操作,避免任何可能破坏其一致性的外部操作(例如使用更改表)。

【讨论】:

这可以使用用户名(/token)进行读/写访问? 是的,当然。通常,您将使用常见操作创建 API 视图或视图集:get 用于检索,Post、Put、Patch、Delete 用于写入。对于您可以指定所需权限的所有内容:AllowAny、IsAuthenticated 等,请参阅:django-rest-framework.org/api-guide/permissionsdjango-rest-framework.org/api-guide/authentication 对于后端的标记化,我使用 simple-jwt:django-rest-framework-simplejwt.readthedocs.io/en/latest

以上是关于从独立的python脚本访问postgresql上的django数据库的主要内容,如果未能解决你的问题,请参考以下文章

在 Apache Zeppelin 上运行独立的 python 脚本

从 python 脚本打开多个独立终端

从 docker 容器(linux 上的 docker)访问主机 postgresql

Postgresql 从 PHP 脚本中复制批量数据 - 理想情况下使用 ADODB

如何在 postgresql 中为数据库创建用户? [关闭]

转:PostgreSQL的clog—从事务回滚速度谈起