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。
    
  • 相关阅读:
    IE Only的userData 简单
    IE userdata 原理 应用 详解 简单
    shell命令执行顺序 简单
    Linux split命令实例 简单
    PHP中调用系统命令的system(),exec(),passthr 简单
    HTML5 LocalStorage 本地存储 简单
    linux 下查看机器配置命令 简单
    《高效能人士的七个习惯》读书笔记 简单
    poj 1042(贪心)
    poj 2485 Highways (prim)
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/14143005.html
Copyright © 2011-2022 走看看