zoukankan      html  css  js  c++  java
  • Python 连接数据库

    sqlite3

    import sqlite3
    # 创建数据库连接
    conn = sqlite3.connect("wucai.db")
    # 获取游标
    cur = conn.cursor()
    # 创建数据表
    cur.execute("CREATE TABLE IF NOT EXISTS heros (id int primary key, name text, hp_max real, mp_max real, role_main text)")
    # 插入英雄数据
    cur.executemany('insert into heros values(?, ?, ?, ?, ?)',
                    ((10000, '夏侯惇', 7350, 1746, '坦克'),
                     (10001, '钟无艳', 7000, 1760, '战士'),
                     (10002, '张飞', 8341, 100, '坦克'),
                     (10003, '牛魔', 8476, 1926, '坦克'),
                     (10004, '吕布', 7344, 0, '战士')))
    cur.execute("SELECT id, name, hp_max, mp_max, role_main FROM heros")
    result = cur.fetchall()
    print(result)
    # 提交事务
    conn.commit()
    # 关闭游标
    cur.close()
    # 关闭数据库连接
    conn.close()
    
    '''
    SELECT 
    SUM((CASE WHEN Age IS NULL THEN 1 ELSE 0 END)) AS age_null_num, 
    SUM((CASE WHEN Cabin IS NULL THEN 1 ELSE 0 END)) AS cabin_null_num
    FROM titanic_train
    '''
    
    
    

    Pymysql

    import pymysql
    import json
    
    # 打开数据库连接
    db = pymysql.connect("localhost","root","123456","his" )
    
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    
    # SQL 插入语句
    sql = """SELECT * FROM doctor limit 10"""
    try:
        # 执行sql语句
        rnum=cursor.execute(sql)
    
        results = cursor.fetchall()
        # 提交到数据库执行
        db.commit()
    except:
        # 如果发生错误则回滚
        db.rollback()
    
    # 关闭数据库连接
    db.close()
    
    print("共有",rnum,"行",sep='')
    for res in results:
        print(json.dumps(res,ensure_ascii=False))
    
    
    
    

    SQLAlchemy

    SQLAlchemy是一个ORM框架。

    # 导入:
    from sqlalchemy import Column, String, create_engine
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy import Integer
    # 创建对象的基类:
    Base = declarative_base()
    
    # 定义User对象:
    class HEROS(Base):
        # 表的名字:
        __tablename__ = 'heros'
    
        # 表的结构:
        id = Column(Integer, primary_key=True)
        name = Column(String(20))
        hp_max=Column(Integer())
        mp_max=Column(Integer())
        role_main=Column(String(255))
    
    # 初始化数据库连接:
    engine = create_engine('sqlite:///wucai.db')
    # 创建DBSession类型:
    DBSession = sessionmaker(bind=engine)
    
    # 创建session对象:
    session = DBSession()
    
    #one()返回一行
    doctors = session.query(HEROS).filter(HEROS.id>=10000).all()
    
    ''' query:
    SELECT heros.id AS heros_id, heros.name AS heros_name, heros.hp_max AS heros_hp_max, heros.mp_max AS heros_mp_max, heros.role_main AS heros_role_main 
    FROM heros 
    WHERE heros.name >= ?
    '''
    
    print("共有",len(doctors),"行",sep='')
    for doctor in doctors:
        print(doctor.__dict__)
    
    
    # 提交即保存到数据库:
    session.commit()
    # 关闭session:
    session.close()
    
    可见,ORM就是把数据库表的行与相应的对象建立关联,互相转换。
    
    由于关系数据库的多个表还可以用外键实现一对多、多对多等关联,相应地,ORM框架也可以提供两个对象之间的一对多、多对多等功能。
    
    例如,如果一个User拥有多个Book,就可以定义一对多关系如下:
    
    class User(Base):
        __tablename__ = 'user'
    
        id = Column(String(20), primary_key=True)
        name = Column(String(20))
        # 一对多:
        books = relationship('Book')
    
    class Book(Base):
        __tablename__ = 'book'
    
        id = Column(String(20), primary_key=True)
        name = Column(String(20))
        # “多”的一方的book表是通过外键关联到user表的:
        user_id = Column(String(20), ForeignKey('user.id'))
    
    当我们查询一个User对象时,该对象的books属性将返回一个包含若干个Book对象的list。
    
  • 相关阅读:
    Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1
    分析Http 请求
    Asp.Net基础知识回顾_状态管理
    泛型约束
    【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
    【转】【完全开源】微信客户端.NET版
    【转】【完全开源】百度地图Web service API C#.NET版,带地图显示控件、导航控件、POI查找控件
    【转】Android总结篇系列:Activity Intent Flags及Task相关属性
    【转】Android总结篇系列:Activity启动模式(lauchMode)
    【转】Android总结篇系列:Activity生命周期
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/14143005.html
Copyright © 2011-2022 走看看