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。
    
  • 相关阅读:
    jquery动态生成button的点击事件
    datatable 相关属性翻译
    python程序出现403错误
    相同布局的div层叠,冲突问题解决
    js进阶
    css进阶
    pycharm快捷键及常用设置
    arcgis软件安装相关问题
    将input type="file" 类型的图片文件转成base64
    SpringMVC中的参数绑定总结
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/14143005.html
Copyright © 2011-2022 走看看