Aller au contenu

Python/SQLAlchemy

Avy amin'i Wikibooks

Torolàlana SQLAlchemy: Endri-javatra Fototra sy Mandroso

[hanova]

SQLAlchemy dia ORM (Object-Relational Mapping) mahery vaika ho an'ny Python, izay mamela anao hiasa amin'ny tahiry tsy mampiasa SQL mivantana. Ity cheatsheet ity dia manome topi-maso fohy momba ny endri-javatra fototra sy mandroso amin'ny SQLAlchemy.

Fomba fototra amin'ny SQLAlchemy

[hanova]
  • Fampidirana sy Fametrahana ny SQLAlchemy :

Mba hampiasana SQLAlchemy dia mila mametraka azy aloha ianao:

pip install sqlalchemy
  • Famoronana Firafitry ny Database :

Miaraka amin'ny SQLAlchemy, afaka mamorona firafitry ny tahiry amin'ny alalan'ny modely ianao.

from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    age = Column(Integer)

engine = create_engine('sqlite:///database.db')
Base.metadata.create_all(engine)
  • Famoronana Fivoriana (Session) :

Ny fivoriana dia ampiasaina hitantanana ny fifandraisana amin'ny tahiry sy ny fanovana angon-drakitra.

Session = sessionmaker(bind=engine)
session = Session()
  • Fametrahana Angona ao amin'ny Tahiry :

Afaka mametraka angona vaovao ao amin'ny tahiry ianao amin'ny alalan'ny famoronana zavatra avy amin'ny modely ary manampy azy amin'ny fivoriana.

new_user = User(name='Rakoto', age=30)
session.add(new_user)
session.commit()
  • Fikarohana Angona :

SQLAlchemy dia manohana ny fikarohana angona amin'ny alalan'ny fifantina (queries).

users = session.query(User).all()
for user in users:
    print(user.name, user.age)
  • Fanavaozana sy Famafana Angona :

Azonao atao ny manavao na mamafa angona avy amin'ny tahiry.

Fanavaozana
user = session.query(User).filter_by(name='Rakoto').first()
user.age = 31
session.commit()
Famafana
session.delete(user)
session.commit()

Endri-javatra Mandroso amin'ny SQLAlchemy

[hanova]
  • Fifandraisana (Relationships) :

SQLAlchemy dia manohana ny fifandraisana eo amin'ny modely, toy ny one-to-many sy many-to-many.

One-to-Many
from sqlalchemy.orm import relationship

class Address(Base):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    email = Column(String)
    user_id = Column(Integer, ForeignKey('users.id'))
    user = relationship("User", back_populates="addresses")

User.addresses = relationship("Address", order_by=Address.id, back_populates="user")
Many-to-Many
association_table = Table('association', Base.metadata,
    Column('user_id', Integer, ForeignKey('users.id')),
    Column('group_id', Integer, ForeignKey('groups.id'))
)

class Group(Base):
    __tablename__ = 'groups'
    id = Column(Integer, primary_key=True)
    name = Column(String)

User.groups = relationship("Group", secondary=association_table, back_populates="users")
Group.users = relationship("User", secondary=association_table, back_populates="groups")
  • Lazy Loading vs. Eager Loading :

SQLAlchemy dia manohana fomba roa hanalana angona mifandray: lazy loading sy eager loading.

Lazy Loading
user = session.query(User).first()
print(user.addresses)  # Ny angona addresses dia alaina rehefa ilaina
Eager Loading
user = session.query(User).options(joinedload(User.addresses)).first()
print(user.addresses)  # Ny angona addresses dia alaina miaraka amin'ny angona user
  • Fampidirana Query ho an'ny tahiry lehibe (SQL Expressions) :

Azonao atao ny mampiasa query SQL mivantana amin'ny alalan'ny fampiasana SQL expressions amin'ny SQLAlchemy.

from sqlalchemy import text

result = session.query(User).from_statement(text("SELECT * FROM users WHERE age > :age")).params(age=25).all()
for user in result:
    print(user.name, user.age)
  • Mifandray amin'ny tahiry maro :

SQLAlchemy dia mamela ny fampiasana tahiry maromaro amin'ny alalan'ny fifandraisana sy motera maro.

engine1 = create_engine('sqlite:///database1.db')
engine2 = create_engine('sqlite:///database2.db')

Session1 = sessionmaker(bind=engine1)
Session2 = sessionmaker(bind=engine2)

session1 = Session1()
session2 = Session2()

Fehiny

[hanova]

SQLAlchemy dia fitaovana mahery vaika sy mora ampiasaina ho an'ny fitantanana tahiry amin'ny Python. Amin'ny alalan'ny fahalalana ireo endri-javatra fototra sy mandroso ireo, dia afaka mamorona rindrambaiko matotra sy manintona ianao amin'ny alalan'ny SQLAlchemy, ka manamora ny fitantanana angona sy ny fifandraisana amin'ny tahiry.