Форум сайта python.su
Всем привет. Почитал мануал, попробовал, ничего не получается…
Есть две таблицы.
users (
id Integer, primary-key, auto-inc
fio string 150
region_id integer
)
regions(
id integer primary-key, auto-inc,
val string 100
)
Офлайн
Все, спасибо. Сам разобрался.
Офлайн
PROeXTНу раз уж разобрался, так запости, так сказать для потомков :)
Офлайн
BIONНу что ж. Для потомков - это святое. Выкладываю пример полного листинга:PROeXTНу раз уж разобрался, так запости, так сказать для потомков :)
# -*-coding: utf-8; show-trailing-whitespace: t -*-
import sqlite3
from sqlalchemy import Table, ForeignKey, Unicode, Integer, create_engine, MetaData, Column
from sqlalchemy.orm import mapper, sessionmaker, scoped_session, relation
engine = create_engine("sqlite:///memory")
Session = scoped_session(sessionmaker(autoflush=True, transactional=True, bind=engine))
session = Session()
metadata = MetaData(bind=engine)
tbl_regions = Table("regions", metadata,
Column("id", Integer, primary_key=True),
Column("reg_name", Unicode(100)))
tbl_person = Table("persons", metadata,
Column("id", Integer, primary_key=True),
Column("fio", Unicode(150)),
Column("region_id", Integer, ForeignKey("regions.id")))
class Person(object):
def __init__(self, fio=u""):
self.fio = fio
def repr(self):
return "<Person(id:{%d}, fio:{%s})>" % (self.id, self.fio)
class Region(object):
def __init__(self, reg_name=u""):
self.reg_name = reg_name
def repr(self):
return "<Region(id:{%d}, reg_name:{%s})>" % (self.id, self.reg_name)
mapper(Region, tbl_regions)
mapper(Person, tbl_person,
properties={"regions": relation(Region, uselist=True)})
############################################################################
# #
# Testing block #
# #
############################################################################
import unittest
class TestApp(unittest.TestCase):
def setUp(self):
metadata.create_all()
def tearDown(self):
metadata.drop_all()
def test_main(self):
person = Person(u"Test fio")
person.regions.append(Region(u"This is the test region"))
session.save(person)
session.commit()
self.assertEqual(person.regions[0].reg_name, u"This is the test region")
if __name__ == "__main__":
unittest.main()
Офлайн
Был бы рейтинг - поставил бы + за юнитесты.
Офлайн
Ferroman:)
Был бы рейтинг - поставил бы + за юнитесты.
Офлайн
PROeXTХочется прокомментировать этот код :)
Ну что ж. Для потомков - это святое. Выкладываю пример полного листинга:
PROeXTДля чего импортирован этот модуль? Вы его где то используете в программе?import sqlite3
PROeXTВ результате выполнения этой строки получается файл ‘memory’, а Вы видимо хотели использовать базу в оперативной памяти, не создавая файл. Следует исправить на (“sqlite:///:memory:”)engine = create_engine("sqlite:///memory")
PROeXTautoflush = True по умолчаниюSession = scoped_session(sessionmaker(autoflush=True, transactional=True, bind=engine))
PROeXTК сожалению нет такого метода и в итоге ошибка.
def test_main(self):
#…
session.save(person)
Отредактировано (Янв. 21, 2011 04:50:16)
Офлайн
m.meehalkoffА вы не подумали что версии алхимии у вас и топикстартера могут отличаться?
Вывод:
Код не работает. Хотя с вопросом связывания таблиц Вы разобрались))
Офлайн