RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-582762

Irkin G.'s questions

Martin Hope
Irking
Asked: 2024-12-03 19:09:28 +0000 UTC

多对多 SQLAlchemy

  • 5

有两个具有预定义名称的имя_класса.lower()+'s'表id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)

无法在两个表之间以及第一个表的记录之间创建多对多关系。

“构建”表:

class Assembly(Base):
    serial_number: Mapped[str_uniq] = mapped_column(String)
    name: Mapped[str] = mapped_column(String)
    link: Mapped[str] = mapped_column(String)
    deleted_at: Mapped[DateTime] = mapped_column(DateTime)

    # Связь с таблицей assemblyparts через backref
    parts: Mapped[list['Part']] = relationship(
        'Part',
        secondary='assemblyparts',
        back_populates='assemblys'
    )

    # Связь с другими сборками через backref
    child_assemblys: Mapped[list['Assembly']] = relationship(
        'Assembly',
        secondary='assemblycompositions',
        primaryjoin=id == column('parent_assembly_id'),
        secondaryjoin=id == column('child_assembly_id'),
        back_populates='parent_assemblys'
    )

    parent_assemblys: Mapped[list['Assembly']] = relationship(
        'Assembly',
        secondary='assemblycompositions',
        primaryjoin=id == column('child_assembly_id'),
        secondaryjoin=id == column('parent_assembly_id'),
        back_populates='child_assemblys'
    )

和“详细信息”:

class Part(Base):
    serial_number: Mapped[str_uniq] = mapped_column(String)
    name: Mapped[str] = mapped_column(String)
    link: Mapped[str] = mapped_column(String)
    deleted_at: Mapped[DateTime] = mapped_column(DateTime)

    # Связь с таблицей assembly_parts через backref
    assemblys: Mapped[list['Assembly']] = relationship(
        'Assembly',
        secondary='assemblyparts',
        back_populates='parts'
    )

还有关联表:

class AssemblyPart(Base):
    '''Ассоциативная таблица для связей между сборками и деталями'''
    assembly_id: Mapped[int] = mapped_column(ForeignKey('assemblys.id'), primary_key=True)
    part_id: Mapped[int] = mapped_column(ForeignKey('parts.id'), primary_key=True)
    quantity: Mapped[int] = mapped_column(Integer)


class AssemblyComposition(Base):
    '''Промежуточная таблица для связи many-to-many между сборками'''
    parent_assembly_id: Mapped[int] = mapped_column(ForeignKey('assemblys.id'))
    child_assembly_id: Mapped[int] = mapped_column(ForeignKey('assemblys.id'))
    quantity: Mapped[int] = mapped_column(Integer)
    # Составной первичный ключ
    __table_args__ = (
        PrimaryKeyConstraint('parent_assembly_id', 'child_assembly_id'),
)

对于装配和零件之间的多对多关系,使用AssemblyPart表- 每个零件可以是多个装配的一部分,并且每个装配可以包含多个零件。另外,每个组件可以包括其他组件并且其本身可以包括在其他组件中。

初始化表的时候出现错误:

sqlalchemy.exc.ArgumentError:无法在关系 Assembly.child_assembles 上找到主联接条件“parent_ assembly_id = :parent_ assembly_id_1”的任何相关外键列。

确保引用列与ForeignKey 或ForeignKeyConstraint 关联,或者在连接条件中使用foreign() 注释进行注释。

如果删除用于将程序集相互连接的关联表 ( AssemblyComposition ) 并从Assembly中删除它的参数,则表的初始化可以正常工作。那些。正确定义了零件和装配体之间的关系。

我做错了什么?

python
  • 1 个回答
  • 18 Views
Martin Hope
Irking
Asked: 2024-11-28 18:37:26 +0000 UTC

SQLAlchemy 模型之间的并行导入

  • 6

我有一个描述数据模型的模块:

Основные классы:
- ActionType: Таблица-Справочник отслеживаемых действий
- AuditLog: Логирование действий пользователей.
- Assembly: Описание сборочных чертежей.
- Part: Описание деталей.
- AssemblyPart: Связь между сборками и деталями.
- AssemblyAssembly: Связь между сборками и другими сборками.
- Material: Таблица-Справочник материалов.
- Thick: Таблица-Справочник толщин материалов.
- ProgramX5: Программы обработки для станков Х5.
- PartProgramX5: Связь между деталями и программами обработки.
- Role: Таблица-Справочник ролей пользователей.
- User: Пользователи системы.

考虑到这是一个最小的结构,我决定立即将其分为 3 部分:

- модуль с основными моделями (Сборки, детали, пользователи)
- модуль со справочниками (роли, материалы и т.д.)
- модуль связей (все модели, организующие связь многие-ко-многим)

然后我遇到了目录/关系和主模型之间的交叉导入。

这是如何解决的?best practices对SQLAlchemy 的声明式风格感兴趣。

python
  • 1 个回答
  • 20 Views
Martin Hope
Irking
Asked: 2024-11-12 14:59:54 +0000 UTC

GitHub + 谷歌 Colab

  • 6

我无法从 colab 推送到 github。

这就是我所做的:

!git config --global user.email "моя_почта@gmail.com"
!git clone https://github.com/мой_аккаунт/мой_репозиторий.git
# вношу изменения
!git add .
!git commit -m 'Внёс какие-то изменения'
!git push origin main

出现错误:

fatal: could not read Username for 'https://github.com': No such device or address

我创建了一对ssh密钥,将pub的内容添加到github帐户中的密钥中,我在colab中尝试了一下

!eval $(ssh-agent -s)
!ssh-add ~/.ssh/id_rsa

又报错:

Agent pid 15997
Could not open a connection to your authentication agent.

我发现这是由于 SSH 代理未运行所致。但是启动是15997,但是密钥有问题。

可能是什么问题?

python
  • 1 个回答
  • 41 Views
Martin Hope
Irking
Asked: 2024-10-22 15:22:11 +0000 UTC

Python 在文件更改时维护目录结构

  • 6

朋友们,大家好。我无法弄清楚这个问题。程序应在给定的 /Old 目录(以及所有子目录)中搜索所有 *.dxf,对图形进行典型更改,然后以相同的名称和相同的路径结构保存到 /New 目录。

from pathlib import Path
import glob
import ezdxf
from google.colab import drive
drive.mount('/content/drive', force_remount=True)

# Путь к старому каталогу
old_path = Path('/content/drive/My Drive/Старые')
# Путь к новому каталогу
new_path = Path('/content/drive/My Drive/Новые')

def save_new_dxf(file, doc):
    # Создаем новый путь для файла в новом каталоге
    new_file = new_path / file.name
    parent_dir = new_file.parent
    if not parent_dir.exists():
        parent_dir.mkdir(parents=True)
    doc.saveas(str(new_file))

def change_dxf(file):
    # Открываем чертеж
    doc = ezdxf.readfile(str(file))
    # Тут вносим типовые изменения

    # Передаём файл на сохранение
    save_new_dxf(file, doc)

# Перебираем все файлы в старом каталоге и подкаталогах с расширением .dxf
for file in old_path.glob('**/*.dxf'):
    change_dxf(file)

一切正常,有变化,但文件保存在 /New 目录中,没有结构,即所有文件都在一个文件夹中。

我怀疑错误是doc.saveas(str(new_file))- 如何将子目录添加到路径中?

python
  • 1 个回答
  • 38 Views
Martin Hope
Irking
Asked: 2024-10-18 20:28:45 +0000 UTC

Python + dxf = 将复杂对象分解为简单对象

  • 5

在 .dxf 中有 Polyline 对象,它们本身就是圆、直线、圆弧等的数组。我需要找到拱门中心的坐标。

图书馆正在使用中import ezdxf

首先,您需要找到拱门本身,为此,您需要分割折线:

for file in glob.glob(os.path.join(old_dir_path, '*.dxf')):
    # Открываем чертеж
    doc = ezdxf.readfile(file)
    msp = doc.modelspace()

    # Получаем все объекты из разбитых полиний
    polys = [poly.explode() for polyin msp if poly.dxftype() == 'LWPOLYLINE']
    print(polys)

问题 - 如何分割折线?在 Nanocad 中,这是 EXPLODE 功能 - 它分割选定的对象。这在 python 中有效,但结果证明对象是某些对象<ezdxf.query.EntityQuery object at 0x79796c41ab90>- 不可能从中提取名称或属性。

有没有人做过类似的事情,请告诉我解决方案

python
  • 1 个回答
  • 34 Views
Martin Hope
Irking
Asked: 2024-10-14 17:14:49 +0000 UTC

Excel / LibreOffice 的监管机构 [关闭]

  • 4
关闭。这个问题需要澄清或者补充细节。目前不接受对此问题的答复。

想要改进这个问题吗?通过编辑这篇文章添加更多详细信息并澄清问题。

3 天前关闭。

改进问题

有一个表文件:

在此输入图像描述

有很多这样的迹象,如何删除合并单元格中的空行?我尝试运行人工智能生成的正则表达式,但没有任何效果。

регулярные-выражения
  • 1 个回答
  • 27 Views
Martin Hope
Irking
Asked: 2024-10-10 13:40:00 +0000 UTC

从txt文件创建表

  • 6

有一个txt文件,包含零件图和装配图列表,通过shift+RMB -> 复制为路径获得。其大致结构(1200+行):

1 812.04.20.1062 - Кронштейн нижний (1370).pdf
812.04.29.0001А - подкладка под ключ.pdf
04.01 812.04.06.0100 СБ - Щит АВ (Ц 293).pdf
04.01 812.04.06.0100Б СБ - Щит 200-93 (Ц 293).pdf
04.01 812.04.06.0100Б - Щит АВ.pdf
04.01 812.04.06.0101Б - Щит Сенсорный.pdf
04.01.01 812.04.18.0101 (изм. 1) - Щит АВ (П Л 1100 244 Вент).pdf
04.01.01 812.24.01.0101 - Щит Сенсорный (500).pdf
04.01.02 812.04.06.0102 - Крепление Линзы Сенсора.pdf

我想制作一个包含字段的表:

  • 序列号:以812开头,例如812.04.20.1062
  • 名称:示例“底括号”
  • 视图:某些图纸中的序列号后面有一个标签SB,这意味着该图纸是装配图,因此视图字段可以值为“SB”或“零件”
  • 更改:在某些图纸中,有一个标记“更改 1” - 这意味着对图纸进行了更改,这也必须在单独的字段中考虑
  • 提示:并非所有图纸都有它;它在末尾的括号中表示,例如“(P L 1100 244 Vent)”

标题中有一定的模式,但总的来说我做到了。这是我的实现:

with open('/content/drive/My Drive/ColabNotebooks/resources/details.txt', 'r') as file:
    content = file.read().split('\n')
    content = [(line[line.find('812'):]) for line in content]

    for line in content:
        serial_number = line[:line.find(' ')]

        if line.find('СБ') == -1:
            type_doc = 'Деталь'
        else:
            type_doc = 'СБ'

        name = line[line.find('-') + 2:]

        hint = name.find('(')
        if hint == -1:
            hint = 0
        else:
            hint = name[hint:]
            name = name[:name.find('(')]


        change = line.find('изм.')
        if change == -1:
            change = 0
        else:
            change = line[change:change + 6].rstrip(')')


        print(f'{serial_number:15}|{name:20}|{type_doc:6}|{change:6}|{hint}')

结论:

812.04.81.1713 |Деталь|     0|Отбойник            |(456)
812.04.02.1720 |СБ    |     0|Вставка в отбойник  |0

5-7秒处理了1200行,但我认为这是由于连接到googledrive(我在googlecolab中编写代码,因为没有办法在工作PC上安装环境)。我使用“全部替换”删除了 .pdf 扩展名和文件本身中的一些其他内容。

在我看来,这是某种怪物,我做了所谓的迎面而来的事情。有没有更简洁的方法?理想情况下使用 Pandas,这样我就可以将其全部写入 CSV。(我也想学习如何与 Pandas 一起工作)

python
  • 1 个回答
  • 29 Views
Martin Hope
Irking
Asked: 2024-08-30 16:28:09 +0000 UTC

删除 .txt 文件的前 N ​​行

  • 5

如何删除文件的前N行?删除后行的顺序并不重要。对我来说最明显的选择是计算循环中的行数,然后运行第二个循环来删除。有更清洁的解决方案吗?

对于一般理解:

该文件将包含最多 50 行(有条件的)标头(解析结果)。当达到此数字时,您需要删除前 40 个,以便文件中仅保留最后 10 个。

解析器检查文章标题是否在文件中;如果没有,则标题包含在结果中(向用户显示)。如果有,则被忽略。我正在寻找的解决方案是防止文件增长。

也许还有另一种解决方案?就像在开头写一个新行并删除最后一行一样。请告诉我什么是正确的。

python
  • 1 个回答
  • 52 Views
Martin Hope
Irking
Asked: 2024-08-24 20:45:23 +0000 UTC

解析 Habr (Python + LxmlSoup)

  • 7

我刚刚开始尝试解析并决定制作一个发送文章列表的机器人。

我在这里收集了标题和最近文章的链接:

from LxmlSoup import LxmlSoup
import requests

html = requests.get('https://habr.com/ru/articles/').text
soup = LxmlSoup(html)

links = soup.find_all('a', class_='tm-title__link')

for i, link in enumerate(links, start=1):
    print(f'{i}: {link.text()}')
    print('https://habr.com' + link.get('href'), '\n')

现在的问题是:

  1. 如何将解析限制为 3-5 个结果?这样他就不会收集整个页面,而只会收集新的 3-5 篇文章(它们是在 hub 上订购的)。
  2. 如何获取一篇文章的发表时间? Hub上的标题旁边写着“55分钟前”,我想记录一个特定的时间(收集统计数据,例如“周四,发表文章的平均时间为40分钟”)
  3. 在哪里以及从哪里阅读有关 html 的内容 - 我很难理解要查找哪些标签以及如何从中获取信息。

如果有的话,这些任务本质上纯粹是教育性的。

python
  • 2 个回答
  • 38 Views
Martin Hope
Irking
Asked: 2024-05-23 20:35:12 +0000 UTC

Python 控制台应用程序的终端导航

  • 5

我有一个控制台应用程序,首先用户登录,然后他可用的命令列表出现在控制台中。

按照惯例,它是这样的:

print('''
command1
command2
''')

每个命令调用一个函数,其实现如下:

command_dict = {'command1': get_command1, 'command2': get_command2}
command_dict[input('Введите команду: ')]()

用户输入命令,例如command2(从数据库获取所有用户的列表),get_command2函数被执行并显示一些数据(例如)。

是否可以以某种方式处理终端中的击键?上下箭头,进入,退出。这样导航是通过直接在终端中按键盘上的按键来进行的。当您创建 docker 命令 Docker init 时,我看到了这一点,当您按下向上/向下按钮时,有一个直接指针沿着终端的线条运行。我的“菜单”要大得多,并且包含嵌套菜单,因此现在这种笨拙的导航变成了一种浪费。我怎样才能把这个东西绑定到钥匙上?也许有一些图书馆?

我自己在谷歌上只找到了图形库,但这不适合我。

python
  • 1 个回答
  • 26 Views
Martin Hope
Irking
Asked: 2024-05-09 23:23:38 +0000 UTC

数据库查询的通用函数(Python + SQLite3)

  • 5

pet 项目的功能与我将在下面附上的功能类似。问题是:在每个这样的函数中都有一个构造“with sqlite3.connect('some.db') as connection:”和一个块“try.... except”。请求不同,接收和给出的参数数量也不同。

创建一个通用函数“func(*args, **kwargs)”是否足够,我将向其传递请求和参数?就最佳实践而言,哪个更好?或者还有其他选择吗?

现在我的项目分为一堆模块,我正在考虑削减/删除其中一些模块。我不太了解OOP,所以目前就是这样。

向日志添加条目的函数;还有类似的读取函数、各种过滤器等:

def add_new_note(user_id):
    note = input('ВВЕДИТЕ ТЕКСТ: ')
    date = datetime.today().strftime("%H:%M-%d.%m.%Y")

    with sqlite3.connect('some.db') as connection:
        cursor = connection.cursor()

        try:
            with connection:
                query = '''INSERT INTO Journal (id_user, note, date)
                        VALUES ({}, {}, {})'''.format(user_id, note, date)
                cursor.execute(query)

        except Exception:
            print("тут ошибки какие-то")

    print("Запись добавлена")
python
  • 1 个回答
  • 23 Views
Martin Hope
Irking
Asked: 2024-05-04 22:04:35 +0000 UTC

递归后的函数不返回任何内容(Python)

  • 5

授权功能。根据设计,如果登录名或密码不正确,该函数将进入递归并再次要求输入登录名和密码,直到输入正确的数据。然后该函数返回有关用户的信息。

如果您第一次尝试登录,该函数将返回一个包含用户数据的元组。但是,如果您在尝试失败后通过授权,该函数将返回 None。

错误在哪里?我附上下面的代码(这是我的第一个项目,在桌子上,我们还没有考虑数据安全)

问题2:用户授权是如何进行的best practices?如果我正在做一个商业项目,我应该考虑什么?

import sqlite3


def user_authorization():
    user_name = input('ИМЯ ПОЛЬЗОВАТЕЛЯ: ')
    user_pass = input('ПАРОЛЬ: ')

    # Подключаемся к БД и вытягиваем всех пользователей
    with sqlite3.connect('Databases/some.db') as connection:
        cursor = connection.cursor()

        try:
            with connection:
                cursor.execute('SELECT id, name, pass, age, rank FROM Users')
                user_list = cursor.fetchall()
        except Exception:
            print("--- тут какие-то ошибки")

    # Если логин есть в БД, то сверяем пароль, в случае успеха отдаём кортеж
    # Если не нашли логин или пароль неверный, то уходим в рекурсию    
    for user in user_list:
        if user[1] == user_name and user[2] == user_pass:
            print(f'Уровень доступа: {user[4]}')
            return user
    else:
        print('Неверное ИМЯ ПОЛЬЗОВАТЕЛЯ или ПАРОЛЬ!')
        user_authorization()


user_info = user_authorization()
print(user_info)
python
  • 1 个回答
  • 24 Views
Martin Hope
Irking
Asked: 2024-05-04 19:14:38 +0000 UTC

将 3 个验证合并为一个 (Python)

  • 6

有 3 个字段需要验证(注册新用户时):用户名、密码和出生年份。检查用户名的唯一性,检查密码的复杂性,并使用格式 1900 < 年龄 < 当前年份简单地检查年份。

对于每个字段都有一个专门用于检查该字段的函数,但这些函数本质上几乎是相同的。这在实际项目中合适吗?

编写一个首先了解该字段是什么然后检查它的大函数是否有意义?我也正在研究OOP,但是现在我根本不明白它的原理。

怎样做才正确呢?他们在商业开发上是如何做到的?

python
  • 1 个回答
  • 34 Views
Martin Hope
Irkin G.
Asked: 2024-02-07 22:30:47 +0000 UTC

Python。<if name:> 条件如何工作

  • 6

我只是在学习,找不到有关这种情况如何运作的信息。

例如,有一个包含任何元素的列表,包括空/空元素。您需要创建一个排除这些元素的列表:

elems = [(), (), ('',), ('a', 'b'), (), ('a', 'b', 'c'), (1,), (), (), ('d',), ('', ''), ()]

non_empty_elems = [el for el in elems if el]

我想知道if el部分发生了什么样的化学反应。

我了解这个构造的作用以及它使用布尔值。

这是否意味着 Python 检查“该元素存在”?那些。在这种情况下 1 是一个现有元素(有值)而 0 是一个空值?或者它的工作方式有所不同?

简单来说, if el执行期间语言内部发生了什么

python
  • 2 个回答
  • 55 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5