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的主要内容,如果未能解决你的问题,请参考以下文章