zoukankan      html  css  js  c++  java
  • 2018年5月10日笔记

    • 在Python中如何表示数据库表

    方法一:由于数据库表是一个二维表,所以可用list表示多行,list的每个元素是tuple,表示一行记录

    如:有一张学生信息表,包含学生的学号,姓名,年龄,可表示如下:

    [
        (1001, "Tom", 18),
        (1002, "Jack", 20),
        (1003, "Karl", 24)
    ]

    方法二:但tuple表示一行很难看出表的结构,用class实例表示一行记录,能更好的了解表结构

    如:用一个Student类中的属性来表示表的字段,用一个Student实例来表示一个学生的信息,如下:

    class Student(object):
        def __init__(self, id, name, age):
            self.id = id
            self.name = name
            self.age = age
    
    [
        Student(1001, "Tom", 18),
        Student(1002, "Jack", 20),
        Student(1003, "Karl", 24)
    ]
    • ORM技术

    ORM:Object-Relational Mapping,把关系数据库的表结构映射到对象上,这就是ORM技术。

    但是由谁来做这个转换呢? 因此ORM框架应运而生。

    在Python中,最有名的ORM框架是SQLAlchemy。

    • 例题1:定义一个Student类来表示Student表
     1 # 每张表用一个类表示
     2 # 表的字段和类的属性是意义对应的
     3 
     4 class Student(object):
     5     def __init__(self, id, name, age):
     6         self.id = id
     7         self.name = name
     8         self.age = age
     9 
    10 student1 = Student(1001, "Tom", 18)
    11 print(student1)
    12 print(student1.id)
    13 print(student1.name)
    14 print(student1.age)
    <__main__.Student object at 0x10214fcc0>
    1001
    Tom
    18
    • 例题2:使用sqlalchemy模块来连接mysql数据库并定义一张studnet表的表结构
     1 from sqlalchemy import create_engine
     2 import pymysql
     3 
     4 engine = create_engine("mysql+pymysql://root:password@47.98.132.77/sqlalchemy")
     5 print(engine)
     6 sql = '''create table student(
     7 id int not null PRIMARY KEY,
     8 name varchar(100),
     9 age int);'''
    10 
    11 cus = engine.connect()
    12 cus.execute(sql)
    13 cus.close()
    • 例题3:使用sqlalchemy模块中预定义的方法代替SQL语句,完成表结构的定义
     1 import pymysql
     2 from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String
     3 
     4 engine = create_engine("mysql+pymysql://root:Karl~612500@47.98.132.77/sqlalchemy")
     5 metadata = MetaData(engine)
     6 
     7 teacher = Table("teacher", metadata,
     8                 Column("id", Integer, primary_key=True),
     9                 Column("name", String(100)),
    10                 Column("age", Integer)
    11                 )
    12 metadata.create_all(engine)
    • 例题4:使用ORM的思想,来新建一张student表
     1 from sqlalchemy import create_engine, Column, Integer, String
     2 from sqlalchemy.ext.declarative import declarative_base
     3 from sqlalchemy.orm import sessionmaker
     4 
     5 engine = create_engine("mysql+pymysql://root:password@47.98.132.77/sqlalchemy")
     6 DBsession = sessionmaker(bind=engine)
     7 session = DBsession()
     8 
     9 Base = declarative_base()
    10 
    11 class Student(Base):
    12     __tablename__ = "student"
    13     id = Column(Integer, primary_key=True)
    14     name = Column(String(100))
    15     age = Column(Integer)
    16     
    17 std1 = Student(id=2001, name="Tom", age=30)
    18 std2 = Student(id=2002, name="Helen", age=26)
    19 std3 = Student(id=2003, name="Rose", age=19)
    20 
    21 session.add_all([std1, std2,std3])
    22 session.commit()
    23 
    24 a = session.query(Student).filter(Student.id>2001).all()
    25 print(a)
    26 for i in a:
    27     print(i.id)
    28     print(i.name)
    29     print(i.age)
    30     
    31 session.close()
    32 
    33 '''
    34 filter和filter_by的区别:
    35     filter_by(name="Karl)   ->  可直接使用属性名,不能使用> <
    36     filter(Student.id>2001) ->  需使用类名.属性名,能使用> <
    37 '''
  • 相关阅读:
    JavaScript Basic Memo
    移动端WEB开发备忘录
    重学前端
    roadhog 构建优化
    ES6 memo
    styled-components 背后的魔法
    怎么在多场景下使用不同的 git 账号 commit
    三方登录总结
    Promise 错误处理
    观察者模式 vs 发布-订阅模式
  • 原文地址:https://www.cnblogs.com/karl-python/p/9027158.html
Copyright © 2011-2022 走看看