来源:廖雪峰
注意连接数据库方式和数据操作方式!
今天发现了个处理数据库的好东西:SQLAlchemy
一般python处理mysql之类的数据库时,都要connect, select, insert, commit等操作,到处都是,很不方便。SQLAlchemy可以解决这个问题。
数据库表是一个二维表,包含多行多列。把一个表的内容用Python的数据结构表示出来的话,可以用一个list表示多行,list的每一个元素是tuple,表示一行记录,比如,包含id
和name
的user
表:
[ ('1', 'Michael'), ('2', 'Bob'), ('3', 'Adam') ]
Python的DB-API返回的数据结构就是像上面这样表示的。
但是用tuple表示一行很难看出表的结构。如果把一个tuple用class实例来表示,就可以更容易地看出表的结构来:
class User(object): def __init__(self, id, name): self.id = id self.name = name [ User('1', 'Michael'), User('2', 'Bob'), User('3', 'Adam') ]
这就是传说中的ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上。是不是很简单?
但是由谁来做这个转换呢?所以ORM框架应运而生。
在Python中,最有名的ORM框架是SQLAlchemy。我们来看看SQLAlchemy的用法。
例子代码:
有一个mysql数据库TESTTABLE, 一个表test_distinct
id是主键
SQLAlchemy连接插入数据库的代码如下,注意,必须有主键,否则会出错!!
#!/usr/bin/python #coding=utf-8 from sqlalchemy import Column, String,Integer, create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Test_Distinct(Base): __tablename__ = 'test_distinct' id = Column(Integer, primary_key=True) name = Column(String(255)) type = Column(String(20)) engine = create_engine('mysql+mysqlconnector://root:123456@localhost:3306/TESTTABLE') DBSession = sessionmaker(bind=engine) session = DBSession() new_data = Test_Distinct(id=8, name='test',type='sqlalchemy') session.add(new_data) session.commit() session.close()
插入后结果: