Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 11, 2016 20:18:23

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Технология работы с базой данных

А ещё можно делать вот так:

import sqlite3
 
with sqlite3.connect(':memory:') as conn:
    conn.enable_load_extension(True)
    conn.execute("SELECT load_extension('spatialite4.dll')")
    conn.execute("CREATE VIRTUAL TABLE kladr USING VirtualDbf('c:/temp/kladr/kladr.dbf', 'CP866')")
    conn.execute("CREATE VIRTUAL TABLE street USING VirtualDbf('c:/temp/kladr/street.dbf', 'CP866')")
 
    qry = '''
        select
            k.name,
            s.name
        from kladr k inner join street s on substr(k.code, 1, 11) = substr(s.code, 1, 11)
        where substr(k.code, 12, 2) = '00' and substr(s.code, 16, 2) = '00'
    '''
    for rec in conn.execute(qry):
        print ' '.join(unicode(i) for i in rec)

Офлайн

#2 Фев. 11, 2016 20:37:30

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Технология работы с базой данных

data - Данные используемые моделью.
DisplayRole - Текст отображаемый в ячейки
QSortFilterProxyModel - Модель - посредник которая сортирует колонки.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Фев. 12, 2016 06:51:23

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Технология работы с базой данных

Большое спасибо, всем. Буду пробовать на выходных. На работе текучкой отвлекают. Хорошо, что есть такой форум и такие специалисты!

Офлайн

#4 Март 5, 2016 06:26:06

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Технология работы с базой данных

Здравствуйте, уважаемые разработчики.
Думал сам разберусь, но видно не судьба. Объясните пожалуйста зачем так сложно МОДЕЛЬ-ПРЕДСТАВЛЕНИЕ? Нельзя просто МОДЕЛЬ и работать с ней? Никак не пойму эту методологию. Для чего нужна модель и для чего нужно представление? И как сохранять изменения в базе?
Я наверно тупые вопросы задаю, сразу извиняюсь. Просто схему работы так и не понял. Хотя читал документацию, разбирал примеры. Все получалось, но это просто дублирование.
Спасибо. (если хоть кто-то откликнется на этот бред)

Офлайн

#5 Март 5, 2016 09:00:02

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Технология работы с базой данных

MaratD
Самое простое это работать непосредственно через SQL запросы. Если вам сложно с ОРМ, то начните с чистого SQL.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Март 5, 2016 10:55:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Технология работы с базой данных

MaratD
Объясните пожалуйста зачем так сложно МОДЕЛЬ-ПРЕДСТАВЛЕНИЕ?
Одну модель можно подключать к нескольким представлениям. Изменение элементов в одном представлении будет сразу отражаться на всех остальных представлениях. Сами представления могут различаться. Например, строковую модель QStringListModel можно поключить как к QListView, так и к QComboBox.

Модель не знает о способе отображения данных или о способе редактирования данных в представлении.
А представление не знает о способе хранения или получения данных в модели.



Отредактировано py.user.next (Март 5, 2016 10:57:17)

Офлайн

#7 Март 5, 2016 13:49:44

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Технология работы с базой данных

Получается, в модели собираются (т.е. выбираются) нужные данные с базы. Например, ФАМИЛИИ и ДАТА РОЖДЕНИЯ. А в представлении мы выбираем нужные данные с модели. И данные в представлениях могут быть разные. Например, в одном представлении ФАМИЛИИ, а в другом ДАТА РОЖДЕНИЯ?
Или не так понял?

Офлайн

#8 Март 5, 2016 17:02:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Технология работы с базой данных

MaratD
И данные в представлениях могут быть разные. Например, в одном представлении ФАМИЛИИ, а в другом ДАТА РОЖДЕНИЯ?
Ты можешь эти данные не из базы брать, а прямо внутри модели создавать. А представление будет их отображать, не зная, откуда они взяты. Модель их просто передаёт представлению, когда представление запрашивает их у модели.

Вот пример, где одна модель подключена к нескольким представлениям:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from PyQt4 import QtGui, QtCore
import sys
 
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
 
    def initUI(self):
        model = QtGui.QStringListModel(self)
        strings = QtCore.QStringList(['abc1', 'def2', 'ghi3'])
        model.setStringList(strings)
 
        view = QtGui.QListView(self)
        view.setModel(model)
 
        combo = QtGui.QComboBox(self)
        combo.setModel(model)
 
        tree = QtGui.QTreeView(self)
        tree.setModel(model)
 
        layout = QtGui.QHBoxLayout(self)
        layout.addWidget(view)
        layout.addWidget(combo)
        layout.addWidget(tree)
 
        self.setLayout(layout)
 
        self.setGeometry(300, 300, 400, 300)
        self.setWindowTitle('Model')
        self.show()
 
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
 
if __name__ == '__main__':
    main()



Отредактировано py.user.next (Март 5, 2016 17:02:52)

Офлайн

#9 Март 9, 2016 17:15:13

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

Технология работы с базой данных

Здравствуйте, уважаемые разработчики.
Значит, в представлении отображается все данные из модели?

Офлайн

#10 Март 9, 2016 19:25:19

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Технология работы с базой данных

> Значит, в представлении отображается все данные из модели?

В представлении отображаются данные которые оно запросит у модели через метод data. Этот метод принимает 2 параметра:
index - экземпляр класса QModelIndex, он содержит сведения о том данные для какой ячейки нужно получить
role - http://doc.crossplatform.ru/qt/4.4.3/qt.html#ItemDataRole-enum



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version