day12_02 orm_basic

Posted flytoyou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day12_02 orm_basic相关的知识,希望对你有一定的参考价值。

orm_basic.py

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

#数据库创建可以由python完成,这里手动完成
engine = create_engine("mysql+pymysql://root:alex3714@192.168.56.12/t1",
                       encoding=\'utf-8\',)# echo=True)

Base = declarative_base()  # 生成orm基类


class User(Base):
    __tablename__ = \'user\'  # 表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    password = Column(String(64))

    \'\'\'
    data = Session.query(User).filter_by().all()
    print(data) #[<__main__.User object at 0x031C72D0>, <__main__.User object at 0x031C79B0>]
    实现[<__main__.User object at 0x031C72D0>, <__main__.User object at 0x031C79B0>]内容可视化
    \'\'\'
    def __repr__(self):
        return "<%s name:%s>" % (self.id,self.name) #[<1 name:alex>, <2 name:jack>]

Base.metadata.create_all(engine)  # 创建表结构


#最基本的表我们创建好了,那我们开始用orm创建一条数据试试
\'\'\'
Session_class = sessionmaker(bind=engine)  # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class()  # 生成session实例

user_obj = User(name="alex", password="alex3714")  # 生成你要创建的数据对象
user_obj2 = User(name="jack", password="122")
print(user_obj.name, user_obj.id)  # 此时还没创建对象呢,不信你打印一下id发现还是None

Session.add(user_obj)  # 把要创建的数据对象添加到这个session里, 一会统一创建
Session.add(user_obj2)
print(user_obj.name, user_obj.id)  # 此时也依然还没创建

Session.commit()  # 现此才统一提交,创建数据
\'\'\'

#查询
Session_class = sessionmaker(bind=engine)  # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class()  # 生成session实例

# user_obj = User(name="ab", password="oldboy")  # 生成你要创建的数据对象
# user_obj2 = User(name="cd", password="oldgirl")
# print(user_obj.name, user_obj.id)  # 此时还没创建对象呢,不信你打印一下id发现还是None
#
# Session.add(user_obj)  # 把要创建的数据对象添加到这个session里, 一会统一创建
# Session.add(user_obj2)
# print(user_obj.name, user_obj.id)  # 此时也依然还没创建
#
# Session.commit()  # 现此才统一提交,创建数据

\'\'\'
#查询语句
data = Session.query(User).filter_by(name="alex")
print(data)

#显示可视内容
data = Session.query(User).filter_by(name="alex").all()
print(data[0].name,data[0].password)

#显示内容
data = Session.query(User).filter_by().all()
print(data) #[<__main__.User object at 0x031C72D0>, <__main__.User object at 0x031C79B0>]

#条件查询
data = Session.query(User).filter_by(id=2).all()
print(data)
data = Session.query(User).filter(User.id > 1).all()
print(data)
data = Session.query(User).filter(User.id == 2).all()
print(data)
#多条件查询
data = Session.query(User).filter(User.id > 1).filter(User.id < 4).all()
print(data)
\'\'\'

\'\'\'
#单挑数据修改
data = Session.query(User).filter(User.id == 3).first()
print(data)
data.name = "Jack Liu"
data.password = "shift happens"
Session.commit()
data = Session.query(User).filter(User.id == 3).all()
print(data)

#多条数据修改
data = Session.query(User).filter(User.id > 1).filter(User.id < 4).all()
print(dir(Session))
\'\'\'

\'\'\'
#回滚
fake_user = User(name=\'Rain\', password=\'12345\')
Session.add(fake_user)

#无需提交
print(Session.query(User).filter(User.name.in_([\'Jack\', \'rain\'])).all())  # 这时看session里有你刚添加和修改的数据

Session.rollback()  # 此时你rollback一下
print("after rollback")
print(Session.query(User).filter(User.name.in_([\'Jack\', \'rain\'])).all())  # 再查就发现刚才添加的数据没有了。
\'\'\'

\'\'\'
#统计(mysql不区分大小写)
fake_user = User(name=\'Rain\', password=\'12345\')
Session.add(fake_user)
Session.commit()
#2+1
print(Session.query(User).filter(User.name.in_([\'Jack Liu\', \'rain\'])).count())

#分组
print(Session.query(func.count(User.name),User.name).group_by(User.name).all() )
\'\'\'

orm_basic2.py

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

engine = create_engine("mysql+pymysql://root:alex3714@192.168.56.12/t1",
                       encoding=\'utf-8\')#,echo=True)

Base = declarative_base()  # 生成orm基类


class User(Base):
    __tablename__ = \'user\'  # 表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    password = Column(String(64))

    \'\'\'
    data = Session.query(User).filter_by().all()
    print(data) #[<__main__.User object at 0x031C72D0>, <__main__.User object at 0x031C79B0>]
    实现[<__main__.User object at 0x031C72D0>, <__main__.User object at 0x031C79B0>]内容可视化
    \'\'\'
    def __repr__(self):
        return "<%s name:%s>" % (self.id,self.name) #[<1 name:alex>, <2 name:jack>]

class Student(Base):
    __tablename__ = \'student\'  # 表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32), nullable=False)
    register_date = Column(DATE,nullable=False)
    # gender = Column(Enum("M","F"),nullable=False)
    gender = Column(String(32), nullable=False)

Base.metadata.create_all(engine)  # 创建表结构


Session_class = sessionmaker(bind=engine)  # 创建与数据库的会话session class ,注意,这里返回给session的是个class,不是实例
Session = Session_class()  # 生成session实例

#添加数据
\'\'\'
s1 = Student(name="S1",register_date="2015-05-01",gender="M")
s2 = Student(name="S2",register_date="2015-03-01",gender="F")
Session.add(s1)
Session.add(s2)

Session.commit()
\'\'\'

# 连表查询(要求id相同)
print(Session.query(User, Student).filter(User.id == Student.id).all())

以上是关于day12_02 orm_basic的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter 助手重复 HTML 代码片段

AI基础_Day02

day12_框架二tools.py代码

day12_框架一sendmail.py代码

day12_框架一main.py代码

day12_框架一start.py代码