Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работают с базами данных в Python? wxPython, MySQL 
V
    Опции темы
Berliner
Дата 21.7.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Цитата

Можно также взять бесплатный вариант из поставки pyWin32 http://www.python.net/crew/mhammond/win32/Downloads.html 

спасиб, скачал exe файл. или  просто надо проинсталить? или что-то кудато подключать? 
PM   Вверх
pythonwin
Дата 21.7.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(Berliner @  21.7.2006,  23:58 Найти цитируемый пост)
спасиб, скачал exe файл. или  просто надо проинсталить? или что-то кудато подключать?  


Инсталировать. 
PM WWW GTalk Jabber   Вверх
Berliner
Дата 21.7.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Заинсталил и пишет не найдена imort.ODBC......... Может по другому надо подключить библиотеку? В хелпе примеров по подключению библиотеки не нашел.  

Это сообщение отредактировал(а) Berliner - 21.7.2006, 20:48
PM   Вверх
diam
Дата 22.7.2006, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 3
Всего: 16



Господа, прошу меня извинить. Я неправильно описал структуру таблиц, во второй и третьей таблице не хватает одного поля, которое увяжет каждую из них с первой таблицей. Поэтому структура такова:
Код

-- Таблица 1: справочник валют
--
-- id   - идентификатор валюты
-- name - наименование валюты
CREATE TABLE currencies
  (
    id SERIAL primary key,
    name TEXT not null unique
  );

-- Таблица 2: состояния операций с валютами
--
-- id            - ключ
-- currencies_id - идентификатор валюты
-- fd            - момент времени, начиная с которого состояние
--                 проведения операций вступает в силу
-- state         - состояние проведения операций:
--                   1 - операции проводятся
--                   2 - операции заблокированы
CREATE TABLE currencystates
  (
    id BIGSERIAL primary key,
    currencies_id BIGINT references currencies(id),
    fd TIMESTAMP not null default CURRENT_TIMESTAMP,
    state INTEGER not null CHECK(state IN (1, 2))
  );

-- Таблица 3: курсы валют по отношению к рублю
-- (стоимость валюты в валюте N1 - рублях)
--
-- id            - ключ
-- currencies_id - идентификатор валюты
-- fd            - момент времени, начиная с которого заданный курс
--                 вступает в силу
-- rate          - новый курс
CREATE TABLE currencyrates
  (
    id BIGSERIAL primary key,
    currencies_id BIGINT references currencies(id),
    fd TIMESTAMP not null default CURRENT_TIMESTAMP,
    rate DOUBLE PRECISION not null
  );

Ещё раз прошу меня простить.

Теперь продолжим.

Цитата(diam @  30.6.2006,  00:57 Найти цитируемый пост)
Задача.
Предоставить информацию в виде таблицы (наименование валюты, курс) на момент времени t1 ('01.04.2006 02:30:00'), отсортированную по наименованию валюты, при этом выбирать только ту валюту, операции с которой на момент времени t1 были разрешены.

Решение.
Сразу же скажу, что я стараюсь отделять запросы SQL от кода, то есть запросы находятся в отдельном модуле и являются пронумерованными. Цель: отделить SQL-код от кода основной программы, тем самым упрощается просмотр кода основной программы, и устранять ошибки становится намного проще. Так, у большого приложения может быть много разных запросов (больше тысячи), но при этом нет никакого бардака. Поэтому у меня создано два файла: pgqueries.py и solution.py, в первом, соответственно, запросы, во втором - код, который забирает результаты из базы и выводит их.
pgqueries.py
Код

SQL_1 = """
-- Выбираем:
--   идентификатор валюты                                                       
--   наименование валюты                                                        
--   курс
-- Из таблиц:
--   справочник валют (a)                                                       
--   состояния валют  (b)                                                       
--   курсы валют      (c)                                                       
-- Где:
--     из всех строк в (b) и (c) рассматриваем только те,                       
--     которые относятся к рассматриваемой строке в (a)                         
--   и 
--     только ту строку в (b), которая относится к                              
--     моменту времени t1                                                       
--   и 
--     выбираем только ту строку из (b), где состояние                          
--     валюты активно (b.state = 1)                                             
--   и 
--     только ту строку в (c), которая относится к                              
--     моменту времени t1                                                       
SELECT
  a.id   AS currencies_id,                                                      
  a.name AS currency,                                                           
  c.rate AS rate                                                                
FROM
  currencies a,
  currencystates b,                                                             
  currencyrates c
WHERE a.id = b.currencies_id                                                    
  AND a.id = c.currencies_id                                                    
  AND b.fd =                                                                    
    (
      SELECT MAX(fd)
      FROM currencystates
      WHERE currencies_id = a.id
        AND fd <= to_timestamp('%(fd)s', 'DD.MM.YYYY HH24:MI:SS')               
    )
  AND b.state = 1
  AND a.id = b.currencies_id                                                    
  AND c.fd =                                                                    
    (
      SELECT MAX(fd)
      FROM currencyrates
      WHERE currencies_id = a.id
        AND fd <= to_timestamp('%(fd)s', 'DD.MM.YYYY HH24:MI:SS')               
    )
ORDER BY a.name
"""


solution.py
Код

from pgqueries import *
from pyPgSQL import PgSQL                                                       

pgconn = PgSQL.connect(host = 'dbhost',
        database = 'dbname', user = 'dbuser',password = 'dbpassword')           
pgcurs = pgconn.cursor()

fd = "01.04.2006 02:30:00"
pgcurs.execute(SQL_1 % {'fd': fd})
allrows = pgcurs.fetchall()

pgconn.commit()
pgconn.close()

print "id.Валюта: курс"

for row in allrows:
    currencies_id = row[0]
    currency      = row[1]                                                      
    rate          = row[2]

    print "%(id)d.%(currency)s: %(rate)s" % {                                   
            'id'       : currencies_id,                                         
            'currency' : currency,
            'rate'     : rate
        }


Сразу по ходу замечания: я не рассматриваю вопросы вывода полученного результата, не рассматриваю вопросы написания какого-нибудь API, поскольку какой-либо специфики нет по причине простоты задачи. А усложнить всегда успеем smile.
Код не коментирую по причине простоты и небольшого размера, немного прокоментировал лишь запрос.

Вопросы производительности. Ещё не тестировал, напишу позже. 
PM MAIL   Вверх
Berliner
Дата 24.7.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Заинсталил и пишет не найдена import.ODBC.Windows as odbc  Может по другому надо подключить библиотеку? В хелпе примеров по подключению библиотеки не нашел. Прописываю это в интерактивном модуле pythonWindows. Интересно что когда пишу import. (ставлю точку то подсвечивается подсказка ODBC)- значит, библиотека всетаки есть? А почему пишет что ее нет?   
PM   Вверх
pythonwin
Дата 24.7.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Berliner, пожалуйста, приведи пример кода. 
PM WWW GTalk Jabber   Вверх
Berliner
Дата 24.7.2006, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Код

import mx.ODBC.Windows as odbc
 
PM   Вверх
pythonwin
Дата 24.7.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(Berliner @  24.7.2006,  20:12 Найти цитируемый пост)
Python
import mx.ODBC.Windows as odbc
  

У меня тоже ошибка. Ты откуда этот кусок кода взял? 
PM WWW GTalk Jabber   Вверх
dvska
Дата 24.7.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 30.1.2006

Репутация: 6
Всего: 9



Цитата(Berliner @  24.7.2006,  10:53 Найти цитируемый пост)
Заинсталил и пишет не найдена import.ODBC.Windows as odbc  Может по другому надо подключить библиотеку? В хелпе примеров по подключению библиотеки не нашел. Прописываю это в интерактивном модуле pythonWindows. Интересно что когда пишу import. (ставлю точку то подсвечивается подсказка ODBC)- значит, библиотека всетаки есть? А почему пишет что ее нет?    

Я приводил пример для поставки MX, а не PythonWin;
тебе нужно просто 
Код

import odbc
 
--------------------
PM MAIL   Вверх
pythonwin
Дата 24.7.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



dvska, у меня всё равно говорит, что нет такого модуля 
PM WWW GTalk Jabber   Вверх
diam
Дата 25.7.2006, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 3
Всего: 16



Кстати, pythonwin, напиши решение с SQLObject. Я его тоже на производительность потестю, потом результаты выложу. 
PM MAIL   Вверх
pythonwin
Дата 25.7.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(diam @  25.7.2006,  17:05 Найти цитируемый пост)
Кстати, pythonwin, напиши решение с SQLObject. Я его тоже на производительность потестю, потом результаты выложу.  


Хорошо... Но не сегодня - есть проблемы со временем. 
PM WWW GTalk Jabber   Вверх
cherep
Дата 26.7.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 11.1.2006
Где: Москва

Репутация: 1
Всего: 4



Сам то я не видел  smile, но говорят, что вполне крут sqlalchemy

Добавлено @ 21:21 
упс.. запостил раньше времени

даже натыкался на обсуждения, там убеждают, что круче многократно, чем SQLObject. Сам утверждать не могу, т.к. не пробовал ни то ни другое...  но может стоит тоже глянуть  smile  
PM MAIL WWW ICQ   Вверх
pythonwin
Дата 27.7.2006, 07:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



cherep, я тоже это слышал и читал про это, но сам sqlalchemy не использовал, и поэтому пока советую "старенький" SQLObject

Добавлено @ 07:07 
найду время - обязательно разберусь с sqlalchemy. 
PM WWW GTalk Jabber   Вверх
Berliner
Дата 31.7.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Цитата

import odbc

Спасиб -импорт делает.

Но далее
Код

conn = odbc.connect(YOUR_SYBASE_ODBC_DB_NAME, YOUR_SYBASE_DB_USER_ID, YOUR_SYBASE_DB_USER_PASSWORD) 
cur = conn.cursor()
cur.execute('Select col1, col2 from YourTable')
data=cur.fetchall()

вываливает ошибку. типа ненайден conn или отсутсвует метод. ругается на вторую строку- думаю что чарез pythonwin расшерение надо по другому прописывать коннект подскажите как сделать выборку из базы. В pythonwin документации ничего толкового не нашел. Подскажите плиз.  
PM   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0550 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.