SQLAlchemy_ORM

ORM 与 SQLAlchemy 简介:

ORM 叫对象关系映射,ORM 将对象转换成SQL,然后使用数据API执行SQL并获取执行结果

SQLAlchemy 是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型。

MySQL-Python
    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
   
pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
   
MySQL-Connector
    mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
   
cx_Oracle
    oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, INTEGER, String
from sqlalchemy.orm import sessionmaker
print(sqlalchemy.__version__)

engin = create_engine('mysql+pymysql://root:[email protected]:3306/llt_data',echo=True)#echo=True查看翻译好的sql

Base = declarative_base()#生成一个sqlorm基类

#定义一个类(类==表,对象==行)
class User(Base):
    __tablename__ = 'users'#声明表名
#列值
    id = Column(INTEGER,primary_key=True,autoincrement=True)
    name = Column(String(10),index=True)
    fullname = Column(String(10))
    password = Column(String(10))

    __args__ = (
        Index(id, name),#普通索引
        uniqueContr(name,fullname)#组合唯一索引
    )

#可以查看处理的对象具体值
    def __repr__(self):
        return self.name



Base.metadata.create_all(engin)#创建所有表结构
# Base.metadata.drop_all(engine)#删除所有表

ed_user = User(name='zc',fullname='zc1',password='123')
print(ed_user)
#触发sessionmake类的__call__方法,return得到Session实例,赋给变量session,就可以进行(session.)等等操作
MySession = sessionmaker(bind=engin)
session = MySession()
session.add(ed_user)

#插入数据
session.add_all([
    User(name='zc1',fullname='zc2',password='123'),
    User(name='zc1',fullname='zc2',password='123'),
    User(name='zc1',fullname='zc2',password='123'),
    User(name='zc1',fullname='zc2',password='123'),
])

session.commit()#每次必须提交

print(session.query(User).all())
for row in session.query(User).order_by(User.id):
    print(row)

for row in session.query(User).filter(User.name.in_(['zc','zc1''zc2'])):#全匹配里面的
    print(row)

for row in session.query(User).filter(~User.name.in_(['zc4','zc1''zc2'])):#取反,不在这三个之中的数据拿出来
    print(row)
print(session.query(User).filter(User.name == 'zc').count())# 拿到数据,计数

#and_, or_必须导入
from sqlalchemy import and_, or_

for row in session.query(User).filter(and_(User.name == 'zc', User.fullname == 'zc zc2')):#and判断
    print(row)

for row in session.query(User).filter(or_(User.name == 'zc', User.fullname == 'zc zc2')):#or判断,
    print(row)
简单操作表

猜你喜欢

转载自www.cnblogs.com/zcok168/p/9774575.html