zoukankan      html  css  js  c++  java
  • python访问数据库

    一:SQLite

    1.1.Sqlite数据库简介

      SQLite是一个嵌入式的数据库,他的数据库是个文件。

      SQLite本身是c语音写的,所以经常被集成到各种应用程序。

      python就内置了SQLite,所以python使用SQLite不需要安装任何东西,直接进行使用。

      连接到数据库后需要打开游标,称之为Cursor,通过Cursor执行sql预计和执行后的结果。

    1.2使用SQLite数据库

    python中内置的与mysql交互的方法如下:

    #导入SQLit3
    import  sqlite3
    
    #连接sqlite3数据库,数据库文件是test.db,如果文件不存在会自动在当前目录中创建
    conn = sqlite3.connect('test.db')
    
    #创建一个Cursor
    cursor = conn.cursor()
    
    #创建一个user表
    cursor.execute('create table user (id varchar(20) primary key, name varchar(20) )')
    
    #插入一条记录
    cursor.execute(inser into user(id , name) values('1',  'yaohong' ))
    
    #获取插入的条数
    print cursor.rowcount
    
    #关闭cursor
    cursor.close()
    
    #提交事务
    cursor.commit()
    
    #关闭conn
    conn.close()
    

      

    查询结果

    conn = sqlite3.connect('test.db')
    
    cursor = conn.cursor()
    
    #查询
    cursor.executr('select * from user where id=?', ('1',))
    
    #获得查询结果
    values = cursor.fetchall()
    
    print values
    
    cursor.close()
    conn.close()

    查询获取的结果都是一个list,每个元素都是一个tuple。

    要确保打开的Connection对象和Cursor对象都正确地被关闭,否则,资源就会泄露。

    如何才能确保出错的情况下也关闭掉Connection对象和Cursor对象呢?请回忆try:...except:...finally:...的用法。

    二:MySql

    2.1.python中连接MySql

    #导入mysql驱动
    import  mysql.connector
    
    #连接mysql
    conn = mysql.connector.connect(user='root', password='password', database='test', use_unicode=True)
    
    #连接cursor
    cursor = conn.cursor()
    
    #创建usr表
    cursor.exect('create table user  (id varchar(20) primary key, name varchar(20))')
    
    cursor.execute('insert into user (id, name) values (%s, %s)', ['1', 'Michael'])
    
    #提交事务
    cursor.commit()
    cursor.close()
    
    
    #运行查询
    
    cursor = conn.cursor()
    cursor.execute('select * from user where id = %s', ('1',))
    values = cursor.fetchall()
    cursor.close()
    conn.close()
    

      

    三:SQLAlchemy

    3.2.ORM

            数据库是个二维表,包含对行多列。把一个表用python的数据结构来表示的话,可以用一个list表示多行,list的每行是个tuple。如下用id和name的user表。

    [
        ('1', 'Michael'),
        ('2', 'Bob'),
        ('3', 'Adam')
    ]
    

      如果用tuple很难看出表的结构,如果把一个tuple用一个class来表示,就可以更容易的看出表结构。

    class  User(object):
        def __init__(self, id, name):
            self.id = id
            self.name = name
    
    [
        User('1', 'jack'),
        User('2', 'yaohong')          
    ]
    

      以上就是ORM(对象关系)映射

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

    3.1.使用SQLAlchemy

       

    # 导入:
    from sqlalchemy import Column, String, create_engine
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.ext.declarative import declarative_base
    
    #创建对象的基类
    Base = declarative_base()
    
    #定义User对象
    class  User(Base):
           #表的名字
            __tablename__ = 'user'
    
           #表的结构
            id = Column(String(20), primary_key=True)
            name = Column(String(20))
    
    # 初始化数据库连接:
    engine = create_engine('mysql+mysqlconnector://root:password@localhost:3306/test')
    
    # 创建DBSession类型:
    DBSession = sessionmaker(bind=engine)
    

      如果有多个表,则再定义一个class

    class School(Base):
        __tablename__ = 'school'
        id = ...
        name = ...
    

      添加数据

    # 创建session对象:
    session = DBSession()
    
    # 创建User对象
    new_user = User(id='5', name='Bob')
    
    #添加到session
    session.add(new_user)
    
    #提交即保存到数据库:
    session.commit()
    
    # 关闭session:
    session.close()
    

      查询数据

    #session
    session = DBSession()
    
    #创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
    user = session.query(User).filter(User.id=='5').one()
    
    #关闭session
    session.close()
    

      一对多关系

    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。

  • 相关阅读:
    php单例模式
    php编码规范
    mysql_affected_rows的注意点
    ThinkPHP的sql_mode的默认设置,导致无效信息被插入
    InnoDB事务和锁
    php中const和static的区别和联系
    php 位运算符的实际应用(权限判断)
    使用LBS(地理位置)
    OkHttpClient简单封装
    Gson解析json
  • 原文地址:https://www.cnblogs.com/yaohong/p/11745665.html
Copyright © 2011-2022 走看看