dophon框架的数据库模块, также может использоваться как отдельный компонент для взаимодействия с базой данных.
Поддерживает подключение к базе данных MySQL.
Поддерживает операции с данными в форме ORM.
Если у вас есть вопросы, пожалуйста, отправьте электронное письмо автору: ealohu@163.com.
Архитектура модуля разделена на компоненты:
Компонент соединения с MySQL (включая пул соединений, класс соединения, разбиение на страницы, фильтр вывода результатов, удалённый приёмник, обнаружение инкрементных изменений).
Компонент отображения ORM (включая определение базовой структуры отображения, инструменты отображения, определение операций отображения).
Набор абстрактных инструментов (включая чтение, анализ и динамическое обновление файлов результатов, а также динамическое присвоение значений).
Менеджер управления несколькими источниками данных (XML, ORM), встроенный в соответствующий модуль.
Установка через pip:
pip install dophon-db [--user]
# Это конфигурация базы данных
pool_conn_num = 5 # размер пула соединений с базой данных() # по умолчанию 5
pydc_host = 'localhost' # адрес подключения к базе данных
pydc_port = 3306 # порт подключения к базе данных
pydc_user = 'username' # имя пользователя базы данных
pydc_password = 'password' # пароль базы данных
pydc_database = 'database' # имя базы данных (можно добавить параметры подключения после)
pydc_xmlupdate_sech = False # переключатель включения/выключения диспетчеризации обновления результатов
db_pool_exe_time = False # переключатель отладки времени выполнения пула подключений
# Конфигурация нескольких источников данных (создание таблицы базы данных см. test/test.sql)
db_cluster = [
{
'alias': 'data-a',
'host': 'localhost',
'port': 3306,
'database': 'test1',
'user': 'root',
'password': 'root'
}, {
'alias': 'data-b',
'host': 'localhost',
'port': 3306,
'database': 'test2',
'user': 'root',
'password': 'root'
}, {
'alias': 'data-c',
'host': 'localhost',
'port': 3306,
'database': 'test3',
'user': 'root',
'password': 'root',
'tables':['a','user']
}, {
'alias': 'data-d',
'host': 'localhost',
'port': 3306,
'database': 'test4',
'user': 'root',
'password': 'root'
}
]
Результаты запроса: набор сценариев выполнения SQL-запросов, которые часто используются в реальной разработке, поэтому их называют результатами запроса.
Через файл XML можно определить несколько наборов результатов.
mysql.xml
<select id="findAll">
SELECT
*
FROM
table
</select>
Связать файл XML с кодом, чтобы инициализировать результаты запроса.
from dophon.mysql import *
_cursor=db_obj(mysql.xml,auto_fix=True)
# корневой путь должен быть путём к файлу конфигурации
# путь к файлу должен начинаться с /
Получить определённый результат запроса из файла XML через код.
result= _cursor.exe_sql(methodName='findAll')
Поддерживаются динамические параметры (в формате #{}), а также параметры скелета (в формате ${}).
Динамические параметры:
<select id="findAllById">
SELECT
*
FROM
table
WHERE
id=#{id}
</select>
result= _cursor.exe_sql(methodName='findAllById',args={'id':'12345678'})
Параметры скелета:
<select id="findAllByTableName">
SELECT
*
FROM
${table_name}
</select>
result= _cursor.exe_sql(methodName='findAllByTableName',args={'table_name':'test_table'})
Поддерживает одиночные запросы, списки запросов и очереди запросов (идентификатор результата запроса и список параметров в виде списка или словаря).
Одиночный запрос:
<select id="findAllById">
SELECT
*
FROM
table
WHERE
id=#{id}
</select>
result= _cursor.exe_sql_single(methodName='findAllById',args={'id':'12345678'})
# result<dict>
Список запросов:
<select id="findAllById">
SELECT
*
FROM
table
WHERE
id=#{id}
</select>
result= _cursor.exe_sql(methodName='findAllById',args={'id':'12345678'})
# result<list>
Очередь запросов:
result= _cursor.exe_sql_queue(
method_queue=['test1','test2'],
args_queue=[
{'id':'123456','name':'tom'},
{}
]
)
# result<dict>
# {
# method_name:exec_result
# }
result= _cursor.exe_sql_obj_queue(
queue_obj={
'test1':{
'id':'123456'
},
'test2':{}
}
)
# result<dict>
# {
# method_name:exec_result
# }
Поддержка горячего обновления файлов результатов запроса.
update_round(_cursor,1)
# update_round(<cursor>,second:int)
Поддержка удалённого обслуживания файлов результатов запроса.
# remote_path — это URL-адрес файла экспорта XML
remote_cell = remote.get_cell('test.xml', remote_path='http://127.0.0.1:8400/member/export/xml/test.xml')
_cursor = db_obj(remote_cell.getPath(), debug=True)
# или
_cursor = db_obj(remote_cell, debug=True)
В настоящее время поддерживается только операция транзакции с одной таблицей.
Инициализация менеджера модели для получения скелета отображения таблицы.
from dophon import orm
manager = orm.init_orm_manager(['user'])
Создание экземпляра скелета отображения для доступа к таблице.
user = manager.user()
Присвоение значений экземпляру отображения для имитации операций над соответствующей таблицей.
print('Печать переменных объекта')
for attr in dir(user):
print(attr, ":", eval("user." + attr))
print('Начать присваивание значений объекту')
user.user_id = 'id'
user.info_id = 'info_id'
user.user_name = 'user_name'
user.user_pwd = 'user_pwd'
user.user_status = 123
user.create_time = ```
datetime.datetime.now().strftime('%y-%m-%d')
user.update_time = datetime.datetime.now().strftime('%y-%m-%d')
print('Объект присвоен')
print('Печать переменной домена объекта')
for attr in dir(user):
print(attr, ":", eval("user." + attr))
print('Распечатать список параметров объекта')
print(user([]))
print('user([]):', user([]))
print("user(['user_id','info_id']):", user(['user_id', 'info_id']))
print("user.get_field_list():", user.get_field_list())
print("user.alias('user_table').get_field_list():", user.alias('user_table').get_field_list())
Выполняем структурированные операции над экземпляром объекта для выполнения операций с данными в соответствующей таблице базы данных
# Печать оператора операции объекта (внутренний метод)
print(user.where())
print(user.values())
user.select() # Выполнить операцию запроса объекта (не присвоенный объект выполняет все запросы)
user.user_name = '111' # Присвоить значение атрибуту объекта
user.select_one() # Выполнить запрос одной строки (выдает исключение при наличии нескольких результатов)
user.select_all() # Выполнить все запросы (условие уже имеет значение)
user = manager.user() # Получить другой объект модели
user.alias('u').select() # Присваиваем псевдоним объекту и выполняем все запросы
user.user_name = '111' # Присвоение значения атрибуту объекта
user.alias('us').select_one() # Присваиваем другой псевдоним объекту и выполняем запрос одной строки
user.alias('userr').select_all() # Присваиваем еще один псевдоним объекту и выполняем все запросы
# Присвоение значения атрибуту объекта (тип атрибута соответствует типу базы данных)
user.user_id='test_id' # Строковый тип
user.info_id='test_info_id'
user.user_name='test_user_name'
user.user_pwd='test_user_pwd'
user.user_status=1 # Числовой тип
user.create_time = datetime.datetime.now().strftime('%y-%m-%d') # Тип даты
user.update_time = datetime.datetime.now().strftime('%y-%m-%d')
print(user.insert()) # Выполнение операции вставки объекта и печать результата операции
# Присваивание значения атрибуту и выбор части атрибутов для обновления, где указано условие запроса на обновление
user.user_id = 'test_id'
user.info_id = 'info_id'
user.user_name = '柯李艺'
user.user_pwd = '333'
user.user_status = 123
print(user.update(update=['user_name','user_pwd'],where=['user_id']))
# Присвоение значения атрибуту и указание условия удаления для выполнения операции удаления
user.user_id = 'test_id'
user.info_id = 'info_id'
user.user_name = 'user_name'
user.user_pwd = 'user_pwd'
user.user_status = 123
print(user.delete(where=['user_id']))
# Получение двух новых объектов модели
user1=manager.user()
user2=manager.user()
# Распечатать все результаты запроса объекта 1
print(user1.select())
# Присвоение значений атрибутам объекта 1
user1.user_name='early'
# Выполнение левого соединения объекта 1 с объектом 2 и указание отношения соединения (user1.user_id = user2.user_id)
user1.left_join(user2,['user_id'],['user_id'])
# Выполнение левого соединения объекта 1 с объектом 2, присвоение псевдонима объекту 1 (u1), объекту 2 (u2) и указание отношения соединения (user1.user_id = user2.user_id)
user1.alias('u1').left_join(user2.alias('u2'),['user_id'],['user_id'])
# print(user1.exe_join())
# Распечатать результаты запроса после соединения объекта 1
print(user1.select())
"""
Копирование и создание моделей объектов
"""
# Получение нового объекта операции
user1 = manager.user()
print('user1', '---', id(user1)) # Распечатать идентификатор объекта 1
user2 = user1.copy_to_obj(manager.user) # Использование шаблона модели экземпляра менеджера объектов для получения объекта
print('user2', '---', id(user2)) # Распечатать идентификатор объекта 2
print(user1('user_id'))
user3 = user1.read_from_dict({
'user_id': '111'
}) # Использование метода перевода модели объекта для создания нового объекта из словаря
print('user3', '---', id(user3)) # Распечатать идентификатор объекта 3
# Сравнение идентификаторов двух объектов
print(user1('user_id'))
print(user3('user_id'))
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )