[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/psvm-enter/LearnPython/master/python_sqlalchemy.py [Back]  [Original]

# _*_ coding: utf-8 _*_

"""
python_sqlalchemy.py by xianhu
"""

import sqlalchemy
import sqlalchemy.orm
import sqlalchemy.ext.declarative

# engine, echoTruesql, 
# engine = sqlalchemy.create_engine("mysql+pymysql://username:password@hostname/dbname", encoding="utf8", echo=True)
engine = sqlalchemy.create_engine("mysql+pymysql://dba_0:mimadba_0@101.200.174.172/data_secret", encoding="utf8", echo=False)

"""
# engineconnection,withclose,
with engine.connect() as conn:
    # 
    result = conn.execute("select * from tablename limit 10;")
    for item in result:
        print(item)

    # execute,pymysql,commit
    conn.execute("insert into tablename(id, url, title) values(1, 'url1', 'title1');")
    conn.execute("insert into tablename(id, url, title) values(%s, %s, %s);", 2, "url2", "title2")
    conn.execute("insert into tablename(id, url, title) values(%s, %s, %s)", (3, "url3", "title3"))
    conn.execute("insert into tablename(id, url, title) values(%s, %s, %s)", [(31, "url31", "title31"), (32, "url32", "title32")])

    # 
    trans = conn.begin()
    try:
        conn.execute("insert into tablename(id, url, title) values(%s, %s, %s)", [(4, "url4", "title4"), (5, "url5", "title5")])
        trans.commit()
    except Exception as excep:
        trans.rollback()
        raise
    trans.close()
"""

# BaseModel,
BaseModel = sqlalchemy.ext.declarative.declarative_base()


# User
class User(BaseModel):
    __tablename__ = "Users"         # 
    __table_args__ = {
        "mysql_engine": "InnoDB",   # 
        "mysql_charset": "utf8",    # 
    }

    # ,
    id = sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True, autoincrement=True)
    name = sqlalchemy.Column("name", sqlalchemy.String(50), nullable=False)
    age = sqlalchemy.Column("age", sqlalchemy.Integer, default=0)

    # id,Rolesid
    role_id = sqlalchemy.Column("role_id", sqlalchemy.Integer, sqlalchemy.ForeignKey("Roles.id"))

    # ,role_id
    role = sqlalchemy.orm.relationship("Role", foreign_keys="User.role_id")

    # ,role_id,,Roleusers
    # role = sqlalchemy.orm.relationship("Role", foreign_keys="User.role_id", backref=sqlalchemy.orm.backref("users"))


# Role
class Role(BaseModel):
    __tablename__ = "Roles"         # 
    __table_args__ = {
        "mysql_engine": "InnoDB",   # 
        "mysql_charset": "utf8",    # 
    }

    # ,
    id = sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True)
    name = sqlalchemy.Column("name", sqlalchemy.String(50), unique=True)

    # ,Userrole_id
    users = sqlalchemy.orm.relationship("User", foreign_keys="User.role_id")


# Session
DBSessinon = sqlalchemy.orm.sessionmaker(bind=engine)   # 
session = DBSessinon()                                  # 


# 
BaseModel.metadata.drop_all(engine)
# ,,
BaseModel.metadata.create_all(engine)

try:
    # ,commit
    session.query(User).filter(User.id != -1).delete()
    session.query(Role).filter(Role.id != -1).delete()
    # :session.delete()

    # ,,
    session.add(Role(id=1, name="student"))
    session.add(Role(id=2, name="teacher"))
    session.commit()

    session.add(User(name="James", age=20, role_id=1))
    session.add(User(name="Wade", age=40, role_id=2))
    session.commit()

    user = User(name="Kobe", age=24, role_id=1)
    session.add(user)
    session.commit()

    # 
    user.name = "Allen"
    session.merge(user)                         # merge,,
    session.query(User).filter(User.id == user.id).update({User.name: "Allen"})         # update
    session.query(User).filter(User.id == user.id).update({User.age: User.age + 1})     # update,

    # 
    roles = session.query(Role)                 # 
    for role in roles:
        print("Role:", role.id, role.name)

    users = session.query(User)                 # 
    for user in users:
        print("User:", user.id, user.name, user.age, user.role_id)

    # 
    print("get(id):", session.query(User).get(1))                       # id1
    print("get[1:3]:", session.query(User)[1:3])                        # 2-3

    # ,Users
    users = session.query(User).filter(User.id > 6)                     # 
    users = session.query(User).filter(User.id > 6).all()               # ,
    user = session.query(User).filter(User.id > 6).first()              # ,
    users = session.query(User).filter(User.id > 6).limit(10)           # ,10
    users = session.query(User).filter(User.id > 6).offset(2)           # ,3

    users = session.query(User).filter(User.id > 6, User.name == "Kobe")                    # ,and
    users = session.query(User).filter(User.id > 6).filter(User.name == "Kobe")             # ,and
    users = session.query(User).filter(sqlalchemy.or_(User.id > 6, User.name == "Kobe"))    # ,or
    users = session.query(User).filter(User.id.in_((1, 2)))                                 # ,in
    users = session.query(User).filter(sqlalchemy.not_(User.name))                          # ,not

    user_count = session.query(User.id).count()                                             # user
    user_count = session.query(sqlalchemy.func.count(User.id)).scalar()                     # scalar
    session.query(sqlalchemy.func.count("*")).select_from(User).scalar()                    # scalar
    session.query(sqlalchemy.func.count(1)).select_from(User).scalar()                      # scalar
    session.query(sqlalchemy.func.count(User.id)).filter(User.id > 0).scalar()              # filter()  User

    session.query(sqlalchemy.func.sum(User.age)).scalar()                                   # ,scalar
    session.query(sqlalchemy.func.avg(User.age)).scalar()                                   # ,scalar
    session.query(sqlalchemy.func.md5(User.name)).filter(User.id == 1).scalar()             # md5

    users = session.query(sqlalchemy.distinct(User.name))               # ,name
    users = session.query(User).order_by(User.name)                     # ,
    users = session.query(User).order_by(User.name.desc())              # ,
    users = session.query(User).order_by(sqlalchemy.desc(User.name))    # ,

    users = session.query(User.id, User.name)                           # 
    users = session.query(User.name.label("user_name"))                 # 
    for user in users:
        print("label test:", user.user_name)                            # 

    users = session.query(sqlalchemy.func.count(User.name).label("count"), User.age).group_by(User.age)    # 
    for user in users:
        print("age:{0}, count:{1}".format(user.age, user.count))

    # 
    result = session.query(User, Role).filter(User.role_id == Role.id)
    for user, role in result:
        print("user %s's role is %s" % (user.name, role.name))
    users = session.query(User).join(Role, User.role_id == Role.id)
    for user in users:
        print("user join, name:", user.name)

    # 
    roles = session.query(Role)
    for role in roles:
        print("role:%s users:" % role.name)
        for user in role.users:
            print("\t%s" % user.name)
    users = session.query(User)
    for user in users:
        print("user %s's role is %s" % (user.name, user.role.name))

except Exception as excep:
    session.rollback()
    raise

session.close()

Web Proxy Viewer  |  New URL  |  Original Page