LINUX.ORG.RU

История изменений

Исправление WitcherGeralt, (текущая версия) :

Твой же код:

from contextlib import contextmanager
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, Date
from sqlalchemy.orm import Session
from enum import Enum

# import pandas as pd
from sqlalchemy.exc import IntegrityError

from datetime import datetime, date
# import numpy as np

engine = create_engine('sqlite:///:memory:', echo=False)

@contextmanager
def sessionScope():
    try:
        session = Session(bind=engine)
        yield session
        session.commit()
    except Exception as e:
        print(e)
        session.rollback()
    finally:
        session.close()


from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class MyTable1(Base):

    __tablename__ = 'MyTable1'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    cdate = Column(Date, nullable=False)


def getAll():
    result = []
    with sessionScope() as session:
        rows = session.query(MyTable1).all()
        print('- inside the context manager ')
        print(rows)
        result = rows
    return result

if __name__ == '__main__':
    Base.metadata.create_all(engine, tables=[MyTable1.__table__])
    with Session(bind=engine) as session:
        row = MyTable1(id=1, name='foo', cdate=date.today())
        print(type(row.id), row.id, row.name, row.cdate)
        session.add(row)
        session.commit()
    rres = getAll()
    print('- outside the context manager:')
    print(rres)

Без проблем можешь юзать.

Вывод:

<class 'int'> 1 foo 2021-05-11
- inside the context manager 
[<__main__.MyTable1 object at 0x7f8299909780>]
- outside the context manager:
[<__main__.MyTable1 object at 0x7f8299909780>]

Исправление WitcherGeralt, :

Твой же код:

from contextlib import contextmanager
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, Date
from sqlalchemy.orm import Session
from enum import Enum

# import pandas as pd
from sqlalchemy.exc import IntegrityError

from datetime import datetime, date
# import numpy as np

engine = create_engine('sqlite:///:memory:', echo=False)

@contextmanager
def sessionScope():
    try:
        session = Session(bind=engine)
        yield session
        session.commit()
    except Exception as e:
        print(e)
        session.rollback()
    finally:
        session.close()


from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class MyTable1(Base):

    __tablename__ = 'MyTable1'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    cdate = Column(Date, nullable=False)


def getAll():
    result = []
    with sessionScope() as session:
        rows = session.query(MyTable1).all()
        print('- inside the context manager ')
        print(rows)
        result = rows
    return result

if __name__ == '__main__':
    Base.metadata.create_all(engine, tables=[MyTable1.__table__])
    with Session(bind=engine) as session:
        row = MyTable1(id=1, name='foo', cdate=date.today())
        print(type(row.id), row.id, row.name, row.cdate)
        session.add(MyTable1(id=1, name='foo', cdate=date.today()))
        session.commit()
    rres = getAll()
    print('- outside the context manager:')
    print(rres)

Без проблем можешь юзать.

Вывод:

<class 'int'> 1 foo 2021-05-11
- inside the context manager 
[<__main__.MyTable1 object at 0x7f8299909780>]
- outside the context manager:
[<__main__.MyTable1 object at 0x7f8299909780>]

Исходная версия WitcherGeralt, :

Твой же код:

from contextlib import contextmanager
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, String, Date
from sqlalchemy.orm import Session
from enum import Enum

# import pandas as pd
from sqlalchemy.exc import IntegrityError

from datetime import datetime, date
# import numpy as np

engine = create_engine('sqlite:///:memory:', echo=False)

@contextmanager
def sessionScope():
    try:
        session = Session(bind=engine)
        yield session
        session.commit()
    except Exception as e:
        print(e)
        session.rollback()
    finally:
        session.close()


from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class MyTable1(Base):

    __tablename__ = 'MyTable1'

    id = Column(Integer, primary_key=True)
    name = Column(String, nullable=False)
    cdate = Column(Date, nullable=False)


def getAll():
    result = []
    with sessionScope() as session:
        rows = session.query(MyTable1).all()
        print('- inside the context manager ')
        print(rows)
        result = rows
    return result

if __name__ == '__main__':
    Base.metadata.create_all(engine, tables=[MyTable1.__table__])
    with Session(bind=engine) as session:
        row = MyTable1(id=1, name='foo', cdate=date.today())
        print(type(row.id), row.id, row.name, row.cdate)
        session.add(MyTable1(id=1, name='foo', cdate=date.today()))
        session.commit()
    rres = getAll()
    print('- outside the context manager:')
    print(rres)


Без проблем можешь юзать.

Вывод:

<class 'int'> 1 foo 2021-05-11
- inside the context manager 
[<__main__.MyTable1 object at 0x7f8299909780>]
- outside the context manager:
[<__main__.MyTable1 object at 0x7f8299909780>]