Найти - Пользователи
Полная версия: Python + Postgresql
Начало » Базы данных » Python + Postgresql
1 2
Kamisel
Доброго времени суток!
Совсем недавно заинтересовался Python, нахожусь на начальном уровне изучения. К сожалению по форуму не нашёл, имеется бд pgsql установленная на linux в которой периодически обновляются поля т.е поступают новые данные, хотелось бы написать какое то приложение, цель коннектиться к базе и выводить на экран новые пришедшие сообщения т.е соединение должно быть постоянно открыто и раз в 30 сек проверять новые поступления. Приложение планирую для Windows.
Имеются ли мануалы или примеры подобных программ? а так же возможно сделать данное соединение без использования odbc драйвера? Заранее благодарю.
ziro
По архитектуре БД для такого рода приложений можете посмотреть как это организовано в friendsfeed - http://bret.appspot.com/entry/how-friendfeed-uses-mysql - там конечно по mysql, но идеи будут хорошо работать и на слоне.

По поводу соединения с БД - если речь идет именно о питоне - смотрите например здесь - http://wiki.postgresql.org/wiki/Python
Kamisel
Благодарю
DcDr
А подключение к PostgreSQL через psycopg2 - это самый лучший на сегодня из существующих драйверов\адаптеров между PostgreSQL и Python.
Или через SQLAlchemy, если на более высоком уровне хочется программировать.
Kamisel
Да psycopg2 использовал. В принципе у меня получилось соединение, данные все переносятся в таблице и обрабатывается. Теперь мысль в том как сделать, что бы раз в 30 сек допустим, программа проверяла наличие обновлений в таблице, таймер какой то делать нужно? У меня затруднения в этом. Зацикливать процесс не вариант.
zheromo
Используйте потоки

модуль threading

from threading import Thread
class MySheduler(Thread):
def run(self):
while True:
do_something()
time.sleep(30)

MySheduler().start()
Kamisel
>>> class MySheduler(Thread):
def run(self):
while True:
do_something()
time.sleep(5)

SyntaxError: unindent does not match any outer indentation level
>>>
Вот такая ошибка, если честно не очень понял с поточностью, но есть такой скрипт

>>> import threading
>>> class Timer(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.event = threading.Event()
def run(self):
while not self.event.is_set():
print ('hi')
self.event.wait(1)
def stop(self):
self.event.set()
tmr = Timer()
tmr.start()

>>>
Мне кажется понятно, что хочу выводить слово ‘hi’ через определённый интервал времени.
К сожалению тоже не отрабатывает.
Борисенков Сергей
А с отступами у вас все в порядке?
Kamisel
Ошибок последний скрипт не даёт, он просто не запускается, с отступами честно, не знаю, если есть какие то мысли или идеи, прошу высказать предположения, попробую проверить.
Борисенков Сергей
Читаем https://www.ibm.com/developerworks/ru/library/l-python_part_9/
еще ищем в интернете и снова читаем :)

Вобщем где-то так:
import threading
import time

class ClockThread(threading.Thread):
def __init__(self,interval):
threading.Thread.__init__(self)
#self.daemon = True
self.interval = interval
self.runned=True
def run(self):
while self.runned: #True:
print("The time is %s" % time.ctime())
print self.runned
time.sleep(self.interval)

t = ClockThread(5)
t.start()
Чтобы остановть поток:
t.runned =False
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB