python学习笔记-sqlalchemy

ORM简介

    官方:对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

    关系型数据库中数据的存储都是类似二维表的方式,从数据库查询表的数据结果在python中是一个list对象,每个人list元素为为tuple元素。如果随意取出tuple元素需要用2层循环语句才可以实现,为了解决这种python中面向对象和关系数据库不匹配依赖了

SQLalchemy

简介

用法:

第一步,导入系统模块,创建连接

import sqlalchemy
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://root:123456@localhost/python",echo=True)

数据库连接默认2.X支持mysqldb,3.X支持pymysql,"mysql+pymysql"解决找不到数据库连接的问题。

数据库连接格式:mysql+mysql://数据库账户:密码@主机IP/数据库名

echo  值等于True时显示每条执行sql语句,可关闭

创建表操作

1.通过sql创建表

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine("mysql+pymysql://root:123456@localhost/python",echo=True)  #2.X支持mysqdb,3.X支持pymysql
sql ='''create table student(
    id int not null primary key,
    name varchar(50),
    age int,
    address varchar(100));'''     #创建表操作sql
conn = engine.connect()           #获取数据库连接
conn.execute(sql)                 #执行sql创建表语句
conn.close()                      #关闭连接

2.通过orm创建表

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy import Column,Integer,String,Table
engine=create_engine("mysql+pymysql://root:123456@localhost/python",echo=True)
metadata=MetaData(engine)   #用于保存表结构,绑定数据库源
user = Table('user', metadata,
             Column('id', Integer, primary_key=True),
             Column('name', String(20)),
             Column('fullname', String(40))
             )
metadata.create_all(engine)
conn=engine.connect()
conn.close()

metadata.create_all()  用于安全创建表,创建之前会查询表是否存在。

Table对象

table(self,"table_name",metadata,*args,**kwargs)

tablen_name   表的名字

metadata        共享对象

*args               数据库表列

**kwargs         可变参数

   schema              此表的结构名称,默认None
   autoload             自动从现有表中读入表结构,默认False
   autoload_with     从其他engine读取结构,默认None
   include_columns如果autoload设置为True,则此项数组中的列明将被引用,没有写的列明将被忽略,None表示所有都列明都引用,默认None
   mustexist           如果为True,表示这个表必须在其他的python应用中定义,必须是metadata的一部分,默认False
   useexisting          如果为True,表示这个表必须被其他应用定义过,将忽略结构定义,默认False
   owner 表所有者,用于Orcal,默认None

   quote 设置为True,如果表明是SQL关键字,将强制转义,默认False

   quote_schema  设置为True,如果列明是SQL关键字,将强制转义,默认False

   mysql_engine  mysql专用,可以设置'InnoDB'或'MyISAM'

Column对象

Column(self,name,type,*args,**kwargs)

name  字段名称

type    字段类型

*args      

Constraint(约束)、ForeignKey(外键)、Default(默认), Sequenceobjects(序列)定义。 

可变参数 **kwargs

primary_key        如果为True,则是主键
nullable              是否可为Null,默认是True
default               默认值,默认是None
index                  是否是索引,默认是True
unique                是否唯一键,默认是False
onupdate           指定一个更新时候的值,这个操作是定义在SQLAlchemy中,不是在数据库里的,当更新一条数据时设置,大部分用于updateTime这类字段
autoincrement    设置为整型自动增长,只有没有默认值,并且是Integer类型,默认是True
quote                 如果列明是关键字,则强制转义,默认False

session对象

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

engine=create_engine("mysql+pymysql://root:123456@localhost/python",echo=True,connect_args={'charset':'utf8'})    #创建数据库连接
DBSession=sessionmaker(bind=engine)        #创建一个session工厂
session=DBSession()

Base=declarative_base()                      #
class Student(Base):
    __tablename__ = 'python_student'
    id = Column(Integer,primary_key = True)
    name = Column(String(20))
    age = Column(Integer)
    address = Column(String(100))

student1 = Student(id=1,name='张三',age=22,address='北京')    #实例化
student2 = Student(id=2,name='李四',age=23,address='河北')
student3 = Student(id=3,name='刘大',age=25,address='天津')

session.add(student1)                                        #填个单个对象
session.add_all([student2,student3])
session.commit()                                             #提交语句
session.close()                                              #关闭连接

过滤器filter

filter(过滤器)和filter_by的区别

filter需要类型.属性调用对象,使用==判断条件,可以使用>和<逻辑判断,filter_by不需要用类型.属性的方式调用对象,直接用属性调用对象,可以使用<和>逻辑判断。

举例:

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

engine=create_engine("mysql+pymysql://root:123456@localhost/python",connect_args={'charset':'utf8'})    #创建数据库连接
DBSession=sessionmaker(bind=engine)        #创建一个session工厂
session=DBSession()

Base=declarative_base()                      #
class Student(Base):
    __tablename__ = 'python_student'
    id = Column(Integer,primary_key = True)
    name = Column(String(20))
    age = Column(Integer)
    address = Column(String(100))

shuxing=session.query(Student).filter(Student.id==1).first()   #filter过滤
shuxing2=session.query(Student).filter_by(id=2).first()        #filter_by过滤
a=shuxing.id
b=shuxing2.id
print(a)
print(b)

结果:

D:\mypython\venv\Scripts\python.exe D:\mypython\session.py
1
2

Process finished with exit code 0



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值