zoukankan      html  css  js  c++  java
  • python使用orm映射数据库架构

    用sqlalchemy连接sqlserver,操作数据库

     1 # conding:utf-8
     2 from sqlalchemy import create_engine
     3 from sqlalchemy.ext.declarative import declarative_base
     4 from sqlalchemy import Column, Integer, String, DateTime  # 区分大小写
     5 from sqlalchemy.orm import sessionmaker
     6 
     7 # 生成orm基类
     8 base = declarative_base()
     9 
    10 
    11 class Status(base):
    12     __tablename__ = 'Status'  # 表名
    13     __table_args__ = {
    14         'schema': 'Code'    #数据库架构名
    15     }
    16     StatusId = Column(Integer, primary_key=True)
    17     StatusName = Column(String(20))
    18     UpdateTime = Column(DateTime)
    19 
    20 
    21 # 创建连接
    22 engine = create_engine("mssql+pymssql://sa:password@10.138.60.189/DBname?charset=utf8", echo=False)
    23 # base.metadata.create_all(engine)  # 创建表结构,已存在表则无需执行
    24 Session_class = sessionmaker(bind=engine)  ##创建与数据库的会话,class,不是实例
    25 Session = Session_class()  # 生成session实例
    26 
    27 status_obj = Status(StatusName='新增', UpdateTime='2014-07-15 10:25:03') #插入你要创建的数据对象,每执行一次都会新增一次数据。
    28 print(status_obj.StatusId, status_obj.StatusName, status_obj.UpdateTime)   #此时还没创建对象呢,不信你打印一下id发现还是None
    29 Session.add(status_obj)  #把要创建的数据对象添加到这个session里
    30 print(status_obj.StatusId, status_obj.StatusName, status_obj.UpdateTime)  #此时也依然还没创建
    31 Session.commit() #提交,使前面修改的数据生效。
    32 print(status_obj.StatusId, status_obj.StatusName, status_obj.UpdateTime)
    33 
    34 status_obj = Session.query(Status).all()    #查询所有记录
    35 for row in status_obj:  #打印全部内容
    36     print(row.StatusId, row.StatusName, row.UpdateTime)

     如果无法插入报id没有标识,那么可以在数据加上标识

    SQL SERVER Management Studio —> 工具 —> 选项,去掉下面的勾选

    设计表,修改标识规范为是

    还可以通过excute方式

     1 from sqlalchemy import create_engine, Table, MetaData
     2 from sqlalchemy.orm import Session
     3 metadata = MetaData()
     4 engine = create_engine(
     5     'mssql+pymssql://sa:password@10.138.60.189:1433/DBname?charset=utf8',
     6     echo=False)
     7 
     8 Status = Table('Status', metadata, autoload=True, autoload_with=engine, schema='Code')
     9 session = Session(engine)
    10 
    11 aa = Status.insert().values(StatusId=9, StatusName='新增', UpdateTime='2014-07-15 10:25:03.327')
    12 session.execute(aa)
    13 session.commit()
    14 '''
    15 反射数据库所有的表
    16 Base = automap_base()
    17 Base.prepare(engine, reflect=True)
    18 Admin = Base.classes.admin
    19 '''
    20 
    21 res = session.query(Status).all()
    22 print(res)
  • 相关阅读:
    pytest学习Pytest基础
    Docker基础认识
    DNS 域名解析协议
    Python从数据库取数据到Excel
    PO设计模式
    unittest多种加载执行用例方法
    Dev XtraGridView 添加行时滚动条(界面)随焦点滚动
    阅读器关闭时READ的尝试无效 真正原因 测试通过解决办法
    转帖 用SQL语句 查看 某一存储过程 所带参数
    转 C#多线程及控制线程数量,对for循环输出效率
  • 原文地址:https://www.cnblogs.com/carlvine/p/10937265.html
Copyright © 2011-2022 走看看