LINUX.ORG.RU

История изменений

Исправление micronekodesu, (текущая версия) :

Это означает, что ты не понимаешь, как работает импорт модулей в Python.

Да, я затупил, но сейчас с нуля сделал все это и у меня появилась идея. У меня была проблема - либо я все таблицы гружу разом при инициализации модуля работы с базой (долго и не нужно), либо если я делаю это отдельными функциями то у меня будут разные объекты все время. Теперь мне кажется что я нашел нормальный вариант, покритикуй, пожалуйста.

"Основной" модуль, отвечает за коннекты, m0.py:

import uuid

dbdata = {}


def getTable(table):
    if table not in dbdata:
        dbdata[table] = uuid.uuid4().hex
    return dbdata[table]

Пример модулей, который работает с базой - m1.py, m2.py, код одинаковый, но чтоб импортнуть два раза это отдельные файлы:

import m0
foo = m0.getTable('foo')
bar = m0.getTable('bar')

Проверяю:

$ cat script.py
#!/usr/bin/env python3

import m1
import m2

print(m1.foo, m2.foo, m1.foo == m2.foo)
print(m1.bar, m2.bar, m1.bar == m2.bar)

$ ./script.py 
071c8ebb0a60413a8b6636dd3c2570f9 071c8ebb0a60413a8b6636dd3c2570f9 True
746cc3f675ab440aa3b476f10eb58bfb 746cc3f675ab440aa3b476f10eb58bfb True

Исправление micronekodesu, :

Это означает, что ты не понимаешь, как работает импорт модулей в Python.

Да, я затупил, но сейчас с нуля сделал все это и у меня появилась идея. У меня была проблема - либо я все таблицы гружу разом при инициализации модуля работы с базой (долго и не нужно), либо если я делаю это отдельными функциями то у меня будут разные объекты все время. Теперь мне кажется что я нашел нормальный вариант, покритикуй, пожалуйста.

"Основной" модуль, отвечает за коннекты, m0.py:

import uuid

dbdata = {'tables': {}}


def getTable(table):
    if table not in dbdata['tables']:
        dbdata['tables'][table] = uuid.uuid4().hex
    return dbdata['tables'][table]

Пример модулей, который работает с базой - m1.py, m2.py, код одинаковый, но чтоб импортнуть два раза это отдельные файлы:

import m0
foo = m0.getTable('foo')
bar = m0.getTable('bar')

Проверяю:

$ cat script.py
#!/usr/bin/env python3

import m1
import m2

print(m1.foo, m2.foo, m1.foo == m2.foo)
print(m1.bar, m2.bar, m1.bar == m2.bar)

$ ./script.py 
071c8ebb0a60413a8b6636dd3c2570f9 071c8ebb0a60413a8b6636dd3c2570f9 True
746cc3f675ab440aa3b476f10eb58bfb 746cc3f675ab440aa3b476f10eb58bfb True

Исходная версия micronekodesu, :

Это означает, что ты не понимаешь, как работает импорт модулей в Python.

Да, я затупил, но сейчас с нуля сделал все это и у меня появилась идея. У меня была проблема - либо я все таблицы гружу разом при инициализации модуля работы с базой (долго и не нужно), либо если я делаю это отдельными функциями то у меня будут разные объекты все время. Теперь мне кажется что я нашел нормальный вариант, покритикуй, пожалуйста.

"Основной" модуль, отвечает за коннекты, m0.py:

import uuid

dbdata = {'tables': {}, 'connection': None}


def getTable(table):
    if table not in dbdata['tables']:
        dbdata['tables'][table] = uuid.uuid4().hex
    return dbdata['tables'][table]


def getConnection():
    if dbdata['connection'] is None:
        dbdata['connection'] = uuid.uuid4().hex
    return dbdata['connection']

Пример модулей, который работает с базой - m1.py, m2.py, код одинаковый, но чтоб импортнуть два раза это отдельные файлы:

import m0
connection = m0.getConnection()
foo = m0.getTable('foo')
bar = m0.getTable('bar')

Проверяю:

$ cat script.py
#!/usr/bin/env python3

import m1
import m2

print(m1.connection, m2.connection, m1.connection == m2.connection)
print(m1.foo, m2.foo, m1.foo == m2.foo)
print(m1.bar, m2.bar, m1.bar == m2.bar)

$ ./script.py 
56a761c10caf47fb8608b7fff836f877 56a761c10caf47fb8608b7fff836f877 True
071c8ebb0a60413a8b6636dd3c2570f9 071c8ebb0a60413a8b6636dd3c2570f9 True
746cc3f675ab440aa3b476f10eb58bfb 746cc3f675ab440aa3b476f10eb58bfb True