Форум сайта python.su
[{ "id": 1 }, { "id": 2, "children": [{ "id": 3 }, { "id": 4 }, { "id": 5, "children": [{ "id": 6 }, { "id": 7 }, { "id": 8 }] }, { "id": 9 }, { "id": 10 }] }, { "id": 11 }, { "id": 12 }]
from PyQt4 import QtGui, QtSql, QtCore import os.path class window1(QtGui.QWidget): def __init__(self, titletext): QtGui.QWidget.__init__(self) self.resize(800, 600) self.setWindowTitle(titletext) self.OpenOrCreateDB() #подключаемся к БД или создаём новую БД self.layout1 = QtGui.QVBoxLayout() # создаём контейнер для расположения в нём других виджетов self.setLayout(self.layout1) # назначаем его основным для нашей формы (окна) self.model1 = QtSql.QSqlTableModel(None, self.DB) #создаём модель для хранения строк из БД, указываем с какой БД ей работать self.model1.setTable("table1") # указываем нужную таблицу из БД self.model1.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit) # данные сохраняются в БД посредством этой модели, только по команде self.model1.select() # запускаем комаду select, для выборки всех записей из указанной таблицы БД self.tableView1 = QtGui.QTableView() # создаём грид (таблицу для отображения данных из модели) для формы self.tableView1.setModel(self.model1) # указываем гриду из какой модели брать данные для отображения self.tableView1.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) #таким зашибенным способом запрещается редактирование ячеек пользователем self.layout1.addWidget(self.tableView1) self.btnNew = QtGui.QPushButton("Добавить новую строку в БД") #создаём кнопку self.btnNew.clicked.connect(self.btnNewClicked) # связываем событие нажатия на кнопку с обработчиком для этого события self.layout1.addWidget(self.btnNew) # добавляем её в контейнер на форме self.btnEdit = QtGui.QPushButton("Редактировать текущую строку БД") self.btnEdit.clicked.connect(self.btnEditClicked) self.layout1.addWidget(self.btnEdit) def btnNewClicked(self): self.OpenEditWindow("NEW") def btnEditClicked(self): self.OpenEditWindow("EDIT") def OpenEditWindow(self, NewOrEdit): secondwindow = window2(NewOrEdit, self.tableView1.currentIndex().row()) result = secondwindow.exec() # если здесь использовать show, то окно не будет модальным! Т.е. из него можно будет спокойно перейти в другое окно. print (result) def OpenOrCreateDB(self): #создаём объект для работы с БД self.DB = QtSql.QSqlDatabase.addDatabase("QSQLITE", "Base") self.DB.setDatabaseName("./SQLiteBase/Lesson16DB.db") existDB = os.path.exists("./SQLiteBase/Lesson16DB.db") #проверяем физичиское наличие БД if not existDB: print ("БД не существует. Попытка создать новую БД...") if not self.DB.open(): #попытка открыть БД (она же создание новой БД, если файла БД не существует) print("БД не открылась! Ошибка:", self.DB.lastError().text()) else: #подключение к БД произошло. Если при этом была создана новая БД, нужно создать в ней таблицы if not existDB: self.CreateStructureOfNewDB() def CreateStructureOfNewDB(self): query = QtSql.QSqlQuery(self.DB) querytext = ("CREATE TABLE table1 (" "id INTEGER, " "fam VARCHAR(20), " "im VARCHAR(20), " "ot VARCHAR(20), " "dr DATE, " "pol VARCHAR(1), " "gorod VARCHAR(20)" ")") #print (querytext) errors = 0 tmp = query.exec(querytext) if not tmp: errors = errors + 1 querytext = ("CREATE TABLE spisok1 (" "id INTEGER, " "text VARCHAR(20)" ")") tmp = query.exec(querytext) if not tmp: errors = errors + 1 return tmp if errors > 1: print ("БД не создана! Ошибка: ", self.DB.lastError().text()) return False else: return True class window2(QtGui.QDialog): # создаём окно типа Диалог def __init__(self, NewOrEdit, currentIndex_): QtGui.QDialog.__init__(self) self.mapper = QtGui.QDataWidgetMapper() #маппер для связки данных из модели с контролами self.mapper.setModel(windowmain.model1) #связываем его с моделью данных из объекта windowmain self.mapper.setSubmitPolicy(QtGui.QDataWidgetMapper.ManualSubmit) #обновление данных в модели будет произведено только по команде tmpstr = NewOrEdit if NewOrEdit == "NEW": tmpstr = "Добавление новой записи в БД" Record = windowmain.model1.record() #создаём объект типа рекорд для добавления строки в модель windowmain.model1.insertRecord(-1, Record) #insertRow использовать не стоит! Он не поддерживает связанные таблицы! self.mapper.toLast() #маппер тоже передвигаем к последней записи! elif NewOrEdit == "EDIT": tmpstr = "Редактирование записи" self.setWindowTitle(tmpstr) #self.setWindowModality(QtCore.Qt.WindowModal) self.layout2 = QtGui.QHBoxLayout() self.layout2_1 = QtGui.QVBoxLayout() self.layout2.addLayout(self.layout2_1) self.layout2_2 = QtGui.QVBoxLayout() self.layout2.addLayout(self.layout2_2) self.layout2_3 = QtGui.QHBoxLayout() self.layout2.addLayout(self.layout2_3) self.setLayout(self.layout2) Alignment = QtCore.Qt.AlignTop self.id_label = QtGui.QLabel("Номер") self.id_ = QtGui.QLineEdit() self.layout2_1.addWidget(self.id_label, alignment = Alignment) self.layout2_2.addWidget(self.id_, alignment = Alignment) self.mapper.addMapping(self.id_, windowmain.model1.fieldIndex("id")) #связываем контрол id_ с полем id из маппера, который передаст значение в модель, которая передаст в БД (вот такие тут все передасты!) self.fam_label = QtGui.QLabel("Фамилия") self.fam_ = QtGui.QLineEdit() self.layout2_1.addWidget(self.fam_label, alignment = Alignment) self.layout2_2.addWidget(self.fam_, alignment = Alignment) self.mapper.addMapping(self.fam_, windowmain.model1.fieldIndex("fam")) self.im_label = QtGui.QLabel("Имя") self.im_ = QtGui.QLineEdit() self.layout2_1.addWidget(self.im_label, alignment = Alignment) self.layout2_2.addWidget(self.im_, alignment = Alignment) self.mapper.addMapping(self.im_, windowmain.model1.fieldIndex("im")) self.ot_label = QtGui.QLabel("Отчество") self.ot_ = QtGui.QLineEdit() self.layout2_1.addWidget(self.ot_label, alignment = Alignment) self.layout2_2.addWidget(self.ot_, alignment = Alignment) self.mapper.addMapping(self.ot_, windowmain.model1.fieldIndex("ot")) self.dr_label = QtGui.QLabel("Дата рождения") self.dr_ = QtGui.QLineEdit() self.layout2_1.addWidget(self.dr_label, alignment = Alignment) self.layout2_2.addWidget(self.dr_, alignment = Alignment) self.mapper.addMapping(self.dr_, windowmain.model1.fieldIndex("dr")) self.pol_label = QtGui.QLabel("Пол") self.pol_ = QtGui.QLineEdit() self.layout2_1.addWidget(self.pol_label, alignment = Alignment) self.layout2_2.addWidget(self.pol_, alignment = Alignment) self.mapper.addMapping(self.pol_, windowmain.model1.fieldIndex("pol")) self.gorod_label = QtGui.QLabel("Город") self.gorod_ = QtGui.QComboBox() #создаём модель для комбобокса self.gorodModel = QtSql.QSqlTableModel(None, windowmain.DB) self.gorodModel.setTable("spisok1") self.gorodModel.select() self.gorod_.setModel(self.gorodModel) self.gorod_.setModelColumn(1) self.layout2_1.addWidget(self.gorod_label, alignment = Alignment) self.layout2_2.addWidget(self.gorod_, alignment = Alignment) self.mapper.addMapping(self.gorod_, windowmain.model1.fieldIndex("gorod")) self.btnSave = QtGui.QPushButton("Запомнить") self.btnSave.clicked.connect(self.SaveData) self.layout2_3.addWidget(self.btnSave, alignment = QtCore.Qt.AlignRight) self.btnCancel = QtGui.QPushButton("Отменить") self.btnCancel.clicked.connect(self.Cancel) self.layout2_3.addWidget(self.btnCancel, alignment = QtCore.Qt.AlignRight) if NewOrEdit == "EDIT": self.mapper.setCurrentIndex(currentIndex_) # Этот способ выбора текущей строки из модели нужно проерить. Что будет, если данные в модели будут отсортированы? def SaveData(self): self.mapper.submit() #сохраняем изменения в модели windowmain.model1.submitAll() # а теперь сохраняем изменения из модели в БД self.close() def Cancel(self): windowmain.model1.revertAll() #отменяем изменения в модели. Иначе вновь добавленная строка останется. self.close() #закрываем окно if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) windowmain = window1("Первое окно") windowmain.show() sys.exit(app.exec_())
Всем привет.
Подскажите, пожалуйста, как узнать сколько времени осталось до выполнения отложенного задания в celery? Задачу ставлю в очередь так:
task = delayed_function.apply_async(args=[a,b,c], countdown=600)
class Image(models.Model): created_at = models.DateField(auto_now_add=True) updated_at = models.DateField(auto_now=True) image = models.ImageField(upload_to='images/') content_type = models.ForeignKey(ContentType) object_id=models.PositiveIntegerField() content_object = generic.GenericForeignKey('content_type', 'object_id')
class ImagesFormSet(generic.BaseGenericInlineFormSet): pass class ImagesGenericStackedInline(generic.GenericStackedInline): formset = ImagesFormSet class ImagesList(generic.GenericStackedInline): model = Image outside = True
# -*- coding: cp1251 -*- import pymssql con = pymssql.connect(host='127.1.1.1',user='sa',password='pass', database='reports', charset='cp1251') cur = con.cursor() sql = u"insert into users (FirstName,LastName,Job) values ('Вася', 'Пупкин', 'Пользователь')" print sql, isinstance(sql, unicode) # Исходный запрос sql = sql.encode('cp1251') print sql, isinstance(sql, unicode) # Запрос в кодировке БД cur.execute(sql) con.commit() cur.execute('SELECT * FROM users') for row in cur: print row[0], row[1], row[2] con.close()
insert into users (FirstName,LastName,Job) values ('Вася', ‘Пупкин’, ‘Пользователь’) TrueПосле некоторой медитации с доками и исходным кодом библиотеки, решил что кодировку БД достаточно указать один раз в начале, а дополнительное преобразование sql = sql.encode('cp1251') уже не нужно и является старым костылем. Но стало только хуже:
insert into users (FirstName,LastName,Job) values ('Вася', ‘Пупкин’, ‘Пользователь’) False
…
49 Павел Иванов # Нормальные значения, внесенные старой версией
…
55 Aany Ioieei # Значения в неверной кодировке, внесенные новой версией
insert into users (FirstName,LastName,Job) values ('Вася', ‘Пупкин’, ‘Пользователь’) TrueПодскажите, что я делаю не так? Как затолкать в MSSQL простые текстовые данные?
insert into users (FirstName,LastName,Job) values ('Вася', ‘Пупкин’, ‘Пользователь’) True
Traceback (most recent call last):
File “D:\Projects\Губкинский ГПК - НТК2 - Тренажер\tools\chek_mssql.py”, line 26, in <module>
cur.execute(sql) #, params)
File “pymssql.pyx”, line 380, in pymssql.Cursor.execute (pymssql.c:4790)
self._source._conn.execute_query(operation)
File “_mssql.pyx”, line 787, in _mssql.MSSQLConnection.execute_query (_mssql.c:8225)
cpdef execute_query(self, query_string, params=None):
File “_mssql.pyx”, line 818, in _mssql.MSSQLConnection.execute_query (_mssql.c:8107)
self.format_and_run_query(query_string, params)
File “_mssql.pyx”, line 951, in _mssql.MSSQLConnection.format_and_run_query (_mssql.c:9302)
log(query_string)
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 52-55: ordinal not in range(128)
class NewTicket(models.Model): Operator = models.CharField(max_length=50,verbose_name='Оператор') DateW = models.DateTimeField(auto_now_add=True,blank=True,verbose_name='Дата создания') Lic = models.IntegerField(max_length=5,verbose_name='Лицевой счет',blank=True) Adress = models.CharField(max_length=50,verbose_name='Адрес') Telefon = models.CharField(max_length=20,verbose_name='Телефон',blank=True) Problem = models.CharField(max_length=200,verbose_name='Описание проблемы') Arhiwes = models.BooleanField(default=False)
def Showtable(request): Zaiavki = NewTicket.objects.filter(Arhiwes__icontains=0).order_by('-DateW') // Главная таблица Colish = NewTicket.objects.filter(Arhiwes__icontains=0).__len__() Countec = NewTicket.objects.values('Lic').annotate(count=Count('id')).filter(Arhiwes=True)//Таблица повторяющихся лицевых счетов return direct_to_template(request,'1maintable.html',{'Zaiavki':Zaiavki,'Colish':Colish,'Countec':Countec})
{% for opera in Zaiavki %} <tr> <td>{{ opera.Operator }}</td> <td ALIGN="center">{{ opera.DateW|date:"j D b" }}</td> <td ALIGN="center">{{ opera.DateW|date:"f" }}</td> <td ALIGN="center">{{ opera.Lic }}</td> <td ALIGN="center">{{ opera.Adress }}</td> <td ALIGN="center">{{ opera.Telefon }}</td> <td ALIGN="right">{{ opera.Problem }}</td> {% for inside in Countec %} {% if opera.Lic == inside.Lic %} <td>{{ inside.count }}</td> {% else %} <td>0</td> {% endif %} {% endfor %}
def show_button2(): p = parallel.Parallel()
Traceback (most recent call last):Что не так?
File “/media/max/DATA/Projects/Python/PyQtParallelPort/src/PyQtParallelPort.py”, line 15, in show_button2
p = parallel.Parallel()
File “/usr/lib/python2.7/dist-packages/parallel/parallelppdev.py”, line 187, in __init__
self._fd = os.open(self.device, os.O_RDWR)
OSError: No such file or directory: ‘0x378’
var incr: array [0..23] of integer := (1, 4, 10, 23, 57, 145, 356, 911, 1968, 4711, 11969, 27901, 84801, 213331, 543749, 1355339, 3501671, 8810089, 21521774, 8548857, 157840433, 410151271, 1131376761, 2147483647); ch,ch2,n,q,k:integer; arr:array [0..1000] of integer; isx_ar:array [0..100,0..10] of integer; C: Boolean; G: Integer; I: Integer; J: Integer; Tmp: Integer; len: Integer; cur_inc: integer; begin Write ('Введите размер исх. массива кол-во строк'); Readln (k); Write ('Введите размер исх. массива кол-во столбцов'); Readln (q); n:=0; for ch2:=0 to k-1 do begin for ch:=0 to q-1 do begin isx_ar[ch2,ch]:=random(100)-random(100); arr[n]:=isx_ar[ch2,ch]; write (isx_ar[ch2,ch],' '); inc(n); end; writeln; end; n:=n-1; //for i:=0 to n do Write (arr[i],' '); len := n; cur_inc := 0; while 3 * incr[cur_inc + 1] <= n do inc(cur_inc); repeat g := incr[cur_inc]; i := g; repeat j := i - g; c := True; repeat if arr[j] >= arr[j + g] then c := False else begin Tmp := Arr[j]; Arr[j] := Arr[j+g]; Arr[j+g] := Tmp; end; dec(j, g); until not ((j >= 0) and C); inc(i); until not (i <= len); dec(cur_inc); until not (cur_inc <> -1); n:=0; for ch2:=0 to k-1 do begin for ch:=0 to q-1 do begin isx_ar[ch2,ch]:=arr[n]; write (isx_ar[ch2,ch],' '); inc(n); end; writeln; end; end.
print df height weight gender group age male group1 6 0.19 0.59 7 0.26 0.49 group2 6 0.74 0.49 7 0.87 0.39 female group1 6 0.36 0.97 7 0.08 0.36 group2 6 0.17 0.20 7 0.36 0.13
print df.xs(6, level='age') height weight gender group male group1 0.12 0.41 group2 0.49 0.88 female group1 0.00 0.54 group2 0.62 0.99
gender group age male group1 6 0.37 7 0.42 group2 6 0.12 7 0.85 female group1 6 0.56 7 0.67 group2 6 0.55 7 0.94
test_new_fanfic (__main__.Test_SPFFanfic) … /usr/lib/python3/dist-packages/lxml/html/__init__.py:532: ResourceWarning: unclosed <socket.socket object, fd=4, family=2, type=1, proto=6>
value = etree.fromstring(html, parser, **kw)
/home/kappa/PycharmProjects/Fanfics Hub 2/fanfics.py:241: ResourceWarning: unclosed <socket.socket object, fd=4, family=2, type=1, proto=6>
textElements = page.xpath(self.XPATH_TO_TEXT)
pageString = requests.get(self.SPF_PATH + self.id + self.SPF_ADD_PATH + str(numPage), cookies = cookies).text
#google key API_key = "xxxxx" #creating an instance of the class drive_service = build('drive', 'v2', developerKey = API_key) #get a list of child folder in children = drive_service.children().list(folderId='yyyyyyy', **param).execute()
<a href="javascript:DoLogin()" class="btn_checkout_green">
<div class="leftcap"></div><div class="rightcap"></div>
<div class="text">Войти</div>
</a>