小编Cas*_*mon的帖子

SQLAlachmey:ORM 过滤器以匹配列表中的所有项目,而不是任何项目

我想搜索 SQLAlachmey 列表(通过关联表)并通过过滤器匹配其中的多个项目。

我已经查看了这个问题,但我希望仅通过 ORM 过滤器来完成此操作(第二个答案不是通过关联表)。

数据库表设置:

tag_ast_table = Table('tag_association',
                  Base.metadata,
                  Column('file_id', Integer, ForeignKey('files.id')),
                  Column('tag_id', Integer, ForeignKey('tags.id')),
                  PrimaryKeyConstraint('file_id', 'tag_id'))


class File(Base):
    __tablename__ = 'files'

    id = Column(Integer, primary_key=True)
    tags = relationship("Tag", secondary=tag_ast_table)

class Tag(Base):
    __tablename__ = 'tags'

    id = Column(Integer, primary_key=True)
    tag = Column(String)
Run Code Online (Sandbox Code Playgroud)

当前过滤器匹配任何我想修改以匹配所有:

query = db.query(File).filter(File.tags.any(Tag.tag.in_(my_list))).all()
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy python-2.7 python-3.x

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

Pickle打破了Python 3.7的变化

我有自定义列表和字典类,在Python 3.7中进行unpickling时不再有效.

import pickle

class A(dict):
    pass

class MyList(list): 

    def __init__(self, iterable=None, option=A):
        self.option=option
        if iterable:
            for x in iterable:
                self.append(x)

    def append(self, obj):
        if isinstance(obj, dict):
            obj = self.option(obj)
        super(MyList, self).append(obj)

    def extend(self, iterable): 
        for item in iterable:
            self.append(item)


if __name__ == '__main__':
    pickle_file = 'test_pickle'
    my_list = MyList([{'a': 1}])
    pickle.dump(my_list, open(pickle_file, 'wb'))
    loaded = pickle.load(open(pickle_file, 'rb'))
    print(isinstance(loaded[0], A))
Run Code Online (Sandbox Code Playgroud)

适用于Python 2.6到3.6:

"C:\Program Files\Python36\python.exe" issue.py
True
Run Code Online (Sandbox Code Playgroud)

但是不再self.option在3.7中正确设置.

"C:\Program Files\Python37\python.exe" issue.py

Traceback (most recent call last):
  File "issue.py", line …
Run Code Online (Sandbox Code Playgroud)

python pickle python-3.x

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

在 Windows 上的 Python Popen 子进程中暂停 FFmpeg 编码

我试图在 FFmpeg 处于非 shell 子进程中时暂停它的编码(这对于它如何在更大的程序中发挥作用很重要)。这可以通过按下键盘上的“暂停/中断”键来完成,我正在尝试将其发送到 Popen。

命令本身必须是跨平台兼容的,因此我无法以任何方式包装它,但我可以根据需要发送信号或运行特定于平台的函数。

我研究了如何通过 pid 或处理程序向子进程发送“Ctrl+Break”,它建议发送信号,但这引发了“ValueError:不支持的信号:21”

from subprocess import Popen, PIPE
import signal


if __name__ == '__main__':
    command = "ffmpeg.exe -y -i example_video.mkv -map 0:v -c:v libx265 -preset slow -crf 18 output.mkv"
    proc = Popen(command, stdin=PIPE, shell=False)

    try:
        proc.send_signal(signal.SIGBREAK)
    finally:
        proc.wait()
Run Code Online (Sandbox Code Playgroud)

然后尝试使用GenerateConsoleCtrlEvent创建Ctrl+Break事件,如下所述https://learn.microsoft.com/en-us/windows/console/generateconsolectrlevent

from subprocess import Popen, PIPE
import ctypes


if __name__ == '__main__':
    command = "ffmpeg.exe -y -i example_video.mkv -map 0:v -c:v libx265 -preset slow -crf 18 output.mkv"
    proc = Popen(command, …
Run Code Online (Sandbox Code Playgroud)

python subprocess signals ffmpeg popen

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

如何将 QT6 深色主题与 PySide6 一起使用?

简单的演示应用程序我试图将主题设置为 dark。我更喜欢代码版本(非 QtQuick 首选),但我看到的 Python 唯一方法是使用 QtQuick 配置文件,即使这样也行不通。

from PySide6 import QtWidgets
from PySide6 import QtQuick

if __name__ == '__main__':
    app = QtWidgets.QApplication()
    app.setApplicationDisplayName("Should be Dark Theme")
    app.setStyle("Universal")
    view = QtQuick.QQuickView()
    view.show()
    app.exec()
Run Code Online (Sandbox Code Playgroud)

我在同一目录中有一个qtquickcontrols2.conf 配置文件。(还尝试将 QT_QUICK_CONTROLS_CONF 设置为绝对路径。)

[Controls]
Style=Material

[Universal]
Theme=Dark

[Material]
Theme=Dark
Run Code Online (Sandbox Code Playgroud)

然而,它仍然是亮白色的:

不是黑暗主题

我不在乎它是材质风格还是通用风格,只想为标题栏内置一些深色模式。最后,需要一种方法使标题栏变暗,而无需创建自定义标题栏。

感谢您的指导!

python python-3.x qt6 pyside6

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

WSL 2 上的 Python3 需要很长时间(超过 6 分钟)才能导入密钥环

当我尝试pip在我的机器上运行命令时,我注意到这个问题WSL2 Ubuntu-20.04,运行任何东西都需要很长时间。我最终将范围缩小到pip导入keyring模块的时间。

Python 3.8.5 (default, May 27 2021, 13:30:53)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> def import_keyring():
...     time_start = time.time()
...     import keyring
...     print(f"Keyring took {time.time() - time_start} seconds to load")
...
>>> import_keyring()
Keyring took 400.4930064678192 seconds to load
Run Code Online (Sandbox Code Playgroud)

查看进程资源管理器,似乎有一个子进程正在等待:

 dbus-launch --autolaunch <32 character hex string> --binary-syntax --close-stderr
Run Code Online (Sandbox Code Playgroud)

dbus-launch 命令本身似乎没有任何子进程,所以我常常strace查看它挂在哪里:

connect(3, {sa_family=AF_INET, sin_port=htons(6000), sin_addr=inet_addr("<my main machine's …
Run Code Online (Sandbox Code Playgroud)

python dbus pip python-keyring windows-subsystem-for-linux

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