小编Yaa*_*ler的帖子

fastapi:将 sqlalchemy 数据库模型映射到 pydantic geojson 功能

我刚刚开始使用 FastAPI、SQLAlchemy、Pydantic,我正在尝试构建一个简单的 API 端点,以将 postgis 表中的行作为 geojson 特征集合返回。

这是我的sqlalchemy模型:

class Poi(Base):
    __tablename__ = 'poi'

    id = Column(Integer, primary_key=True)
    name = Column(Text, nullable=False)
    type_id = Column(Integer)
    geometry = Column(Geometry('POINT', 4326, from_text='ST_GeomFromEWKT'),
                      nullable=False)
Run Code Online (Sandbox Code Playgroud)

使用的geojson_pydantic相关pydantic型号有:

from geojson_pydantic.features import Feature, FeatureCollection
from geojson_pydantic.geometries import Point
from typing import List

class PoiProperties(BaseModel):
    name: str
    type_id: int

class PoiFeature(Feature):
    id: int
    geometry: Point
    properties: PoiProperties

class PoiCollection(FeatureCollection):
    features: List[PoiFeature]
Run Code Online (Sandbox Code Playgroud)

期望的输出:

理想情况下,我希望能够检索并返回数据库记录,如下所示:

def get_pois(db: Session, skip: int = 0, limit: int …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy geojson pydantic fastapi

10
推荐指数
1
解决办法
2923
查看次数

使用 PyDantic v2.0^ 声明 Mongo ObjectId 的新方法是什么?

本周,我开始使用 MongoDB 和 Flask,因此我找到了一篇有用的文章,介绍如何通过使用 PyDantic 库定义 MongoDB 的模型来将它们一起使用。然而,这篇文章有点过时了,大部分可以更新到新的 PyDantic 版本,但问题是 ObjectId 是第三方字段,并且在版本之间发生了很大的变化。

本文使用以下代码定义了ObjectId:

from bson import ObjectId
from pydantic.json import ENCODERS_BY_TYPE


class PydanticObjectId(ObjectId):
    """
    Object Id field. Compatible with Pydantic.
    """

    @classmethod
    def __get_validators__(cls):
        yield cls.validate
   
    #The validator is doing nothing
    @classmethod
    def validate(cls, v):
        return PydanticObjectId(v)

    #Here you modify the schema to tell it that it will work as an string
    @classmethod
    def __modify_schema__(cls, field_schema: dict):
        field_schema.update(
            type="string",
            examples=["5eb7cf5a86d9755df3a6c593", "5eb7cfb05e32e07750a1756a"],
        )

#Here you encode the ObjectId as …
Run Code Online (Sandbox Code Playgroud)

python mongodb python-3.x pydantic

10
推荐指数
1
解决办法
7550
查看次数

如何从 Flask 缓存中检索所有密钥?

我正在调试一个 Flask 应用程序,想要查看哪些值存储在我的简单缓存中。有没有办法检索所有密钥?(就像你用字典一样......

cache = Cache()
cache.init_app(app, config={"CACHE_TYPE": "simple"})

cache.set("item-1", "red")
cache.set("item-2", "blue")

# I would like to do the following:
# cache.keys()
Run Code Online (Sandbox Code Playgroud)

caching flask

8
推荐指数
1
解决办法
3972
查看次数

允许 Pydantic 中的 JSON 模式为 null

我试图在该对象的 JSON 架构中允许 null:

from pydantic import BaseModel
from typing import Optional

class NextSong(BaseModel):
    song_title: Optional[str] = ...
Run Code Online (Sandbox Code Playgroud)

但结果的模式如下:

{
    "title": "NextSong",
    "type": "object",
    "properties": {
        "song_title": {
            "title": "Song Title",
            "type": "string"
        }
    },
    "required": ["song_title"]
}
Run Code Online (Sandbox Code Playgroud)

生成的架构不允许 Song_title 的值为 null,这不符合预期,但我不确定如何指定允许 null,但该字段仍然是必需的。

pydantic fastapi

8
推荐指数
1
解决办法
5871
查看次数

Alembic 忽略特定表

我正在使用 alembic 根据用户定义的 sqlalchemy 模型管理数据库迁移。我的挑战是我希望 alembic 忽略对特定表集的任何创建、删除或更改。

注意:我的 Q 类似于这个问题Ignoring a model when using alembic autogenerate但不同之处在于我想从模型定义之外控制 alembic。

这是我想忽略的示例表:

from sqlalchemy import MetaData
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(metadata=MetaData())

class Ignore1(Base):
    """
    Signed in to the account...
    """
    __tablename__ = 'ignore_1'
    __table_args__ = {
        'info':{'skip_autogenerate':True}
        }
    id = Column(Integer, primary_key=True)
    foo = Column(String(20), nullable=True)
Run Code Online (Sandbox Code Playgroud)

示例代码(不能解决我的问题):
alembic/env.py

from sqlalchemy import MetaData
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base(metadata=MetaData())

class Ignore1(Base):
    """
    Signed in to the account... …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy alembic

7
推荐指数
1
解决办法
650
查看次数

在 Python / Sqlalchemy 中从数据库记录访问枚举值

我有一堂这样的课:

class VoteEnum(enum.Enum):
    like = "LIKE"
    dislike = "DISLIKE"
    abstain =  "ABSTAIN"
Run Code Online (Sandbox Code Playgroud)

我有一个数据库来存储这些选票:

class MyVotes(db.Model):
    __tablename__ = "my_votes"
    id = db.Column(db.String, primary_key=True, default=lambda: str(uuid4()))
    item = db.Column(db.String,  nullable=False),
    vote = db.Column(db.Enum(VoteEnum))

    def __str__(self):
        return json.dumps({
            "id":self.id,
            "item":self.item,
            # I want to print the value of vote?
    )}
Run Code Online (Sandbox Code Playgroud)

从 sqlalchemy (在 Flask 中)检索值并打印时,出现以下错误:

类型错误:MyVotes 类型的对象不可 JSON 序列化

也许有办法调用我的 sqlalchemy 请求?也许是类方法?我很感谢人们可以提供的任何帮助。

python enums sqlalchemy

6
推荐指数
1
解决办法
1995
查看次数

检查 pandas 中的日期时间对象是否有时区?

我正在将数据导入 pandas,并希望删除数据中存在的任何时区 \xe2\x80\x93。如果数据有时区,则以下代码可以成功运行:

\n
col = "my_date_column"\ndf[col] = pd.to_datetime(df[col]).dt.tz_localize(None) # We don\'t want timezones...\n
Run Code Online (Sandbox Code Playgroud)\n

如果数据不包含时区,我想使用以下代码:

\n
df[col] = pd.to_datetime(df[col])\n
Run Code Online (Sandbox Code Playgroud)\n

我的问题是我不确定如何测试 datetime object/series 中的时区

\n

python timezone datetime pandas

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

使用 Gnome Ubuntu 安装和运行 XRDP(远程桌面)时出错:我遇到黑屏

我正在尝试使用XRDP (远程桌面协议)连接到远程桌面(Gnome Ubuntu)。但是,当我连接 Apache 的Guacamole或 Microsoft时远程桌面时,我遇到带有光标的黑屏。

我可以通过日志以及 ssh 登录和运行测试(proxmox 接口)来验证我的 Ubuntu 服务器是否正常运行。

有趣的是,当我使用xfce4而不是gnome时,我能够连接。但是,由于某种原因我无法使终端正常工作。如果我使用 proxmox 界面登录 gnome,当我在 xfce xrdp 会话中启动它时,我可以看到终端在我的 gnome 会话中弹出。

可能的问题:

可能的问题可能包括我的启动/安装脚本:

# placeholder for script
Run Code Online (Sandbox Code Playgroud)

ubuntu debian gnome virtual-machine xrdp

4
推荐指数
2
解决办法
3万
查看次数

Docker 容器内的 Selenium 找不到 chromedriver

我需要将我的小 Flask 应用程序放入 Docker 容器中,该应用程序可以检查我公司的客户安装了哪种类型的 Google 标签。为此,我需要有 selenium-wire 。你提供一个网站,然后你会得到一个 json 返回,告诉你安装了哪些标签(有点像http://gachecker.com/)。现在它与 Flask 应用程序配合得很好。当我尝试将其放入 Docker 时出现问题,这是我的 docker 脚本:

FROM python:3.9 WORKDIR /bziiit_checker_app

RUN pip install flask flask_restful requests BeautifulSoup4 selenium-wire undetected-chromedriver chromedriver-py

COPY ./app ./app

CMD ["python", "./app/main.py"]
Run Code Online (Sandbox Code Playgroud)

Once it's in Docker and try to run it, i get that message

"selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH"
Run Code Online (Sandbox Code Playgroud)

Which is a common issue when the chromedriver.exe file is not in the working directory. But it IS. Do …

python selenium docker

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

Amazon RDS 超级用户权限

我已创建 Amazon RDS 实例,但无法在其中创建存储过程,因为我缺少超级用户权限。如何获得超级用户权限?

实例:MySQL 5.7.11

amazon-ec2 amazon-web-services amazon-rds

3
推荐指数
1
解决办法
5629
查看次数

使用Google Apps脚本将用户添加到Google网上论坛

我正在尝试使用Google Apps脚本将用户添加到Google网上论坛。

这是我尝试过的代码:

// Adds a user to a Google Group
function addUsertoGroup(userEmail) {
  var userEmail = 'Name@gmail.com'
  var groupId = "group-name@googlegroups.com";
  var group = GroupsApp.getGroupByEmail(groupId);

  // If email is already in group
  try { var hasMember = group.hasUser(userEmail);}
  catch(e){Logger.log(userEmail+" is already in the group"); return}

  var newMember = {email: userEmail, role: "MEMBER"};

  // This is the line which is throwing an error
  AdminDirectory.Members.insert(newMember, groupId);
Run Code Online (Sandbox Code Playgroud)

运行时,我收到一个错误:

对directory.groups.get的API调用失败,并出现以下错误:未找到域。

任何帮助,将不胜感激。

google-api google-groups google-apps-script

3
推荐指数
1
解决办法
169
查看次数

自动截断sqlalchemy的ORM(postgresql数据库)中的字符串

如何自动截断数据模型中多个属性的字符串值,而不需要@validates为每个属性显式定义一种方法?

我当前的代码:

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import validates

class MyModel:
    __tablename__ = 'my_model'

    id = Column(Integer, primary_key=True, autoincrement=True)
    name = Column(String(40), nullable=False, unique=True)

    # I can "force" truncation to my model using "validates"
    # I'd prefer not to use this solution though...
    @validates('name')
    def validate_code(self, key, value):
        max_len = getattr(self.__class__, key).prop.columns[0].type.length
        if value and len(value) > max_len:
            value = value[:max_len]
        return value
Run Code Online (Sandbox Code Playgroud)

我担心的是,我的 ORM 将跨越许多表和字段,并且在字符串长度验证中包含属性时存在很高的监督风险。简而言之,我需要一个可扩展的解决方案。理想情况下,我的会话配置中的某些内容会自动截断太长的字符串......

python postgresql sqlalchemy

3
推荐指数
1
解决办法
1469
查看次数

Python3 - 在 f 字符串中用 \n 分隔的打印列表

我想在 python3 的 f 字符串中打印一条消息,其中包含一个由 \n 分隔的列表。

my_list = ["Item1", "Item2", "Item3"]
print(f"Your list contains the following items:\n\n{my_list}")
Run Code Online (Sandbox Code Playgroud)

期望的输出:

# Your list contains the following items:
#    Item1
#    Item2
#    Item3
Run Code Online (Sandbox Code Playgroud)

python python-3.x f-string

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