python访问数据库

一:SQLite

1.1.Sqlite数据库简介

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

  SQLite自己是c语音写的,因此常常被集成到各类应用程序。mysql

  python就内置了SQLite,因此python使用SQLite不须要安装任何东西,直接进行使用。sql

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

1.2使用SQLite数据库

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

#导入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对象都正确地被关闭,不然,资源就会泄露。fetch

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

 

二: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表。orm

[
    ('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。

相关文章
相关标签/搜索