sqlalchemy是python的一款orm框架
什么是orm?
orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。
sqlalchemy可以链接mysql,sqlite,sqlserver,oracle等等数据库,基本上现在程序开发人员使用的数据库它都可以链接。
首先,我们在Ubuntu上搭建sqlalchemy框架,步骤如下:
(一)、安装MySql
| |
| |
| |
(二)、安装python-mysqldb(如果是python3则不需要此步骤,见步骤六)
| |
(三)、安装easy_install(如果有了就不用装了)要装easy_intall的目的是安装tgz压缩文件夹很方便:
| |
| |
(四)、安装MySQL-Python
| |
(五)、安装sqlalchemy
| |
(六)、安装:pymysql(注意:python3下不可以用mysqldb)
pip install pymysql
pip install pymysql
(七)、安装mysql的可视化工具:mysql-workbench
sudo apt-get install mysql-workbench
安装完打开workbench,连接本地数据库(就是点击界面的'+'号),输入一个connnection名称,设置密码,其他默认即可。
测试:
创建测试数据库testdb
testdb)
mysql> create table products(id int(11) not null auto_increment, name varchar(50) not null, count int(11) not null default '0', primary key (id) );
添加测试数据
mysql> insert products(name, count) values('WuLiangye', 20);
Query OK, 1 row affected (0.01 sec)
mysql> insert products(name, count) values('Maotai', 30);
Query OK, 1 row affected (0.01 sec)
mysql> select * from products;
+----+-----------+-------+
| id | name | count |
+----+-----------+-------+
| 1 | WuLiangye | 20 |
| 2 | Maotai | 30 |
+----+-----------+-------+
2 rows in set (0.00 sec)
mysql>
sqlalchemy访问mysql:
通过import导入必要的包
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
创建一个连接引擎
engine=create_engine("mysql+pymysql://root:a5230411@localhost:3306/test?charset=utf8",echo=True)
engine=create_engine("mysql+pymysql://root:a5230411@localhost:3306/test?charset=utf8",echo=True)
我们将连接引擎放到engine里面方便后面使用。
create_engine("数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库?字符编码格式",其他参数)
上文当中echo=True是开启调试,这样当我们执行文件的时候会提示相应的文字。
创建元数据
什么是元数据?元数据就是描述数据的数据,举个简单的例子,小明身高170cm,体重50kg,性别男。其中身高,体重,性别就是元数据。当我们创建好连接引擎以后可以通过这个引擎抓取元数据。
metadata=MetaData(engine)
通过MetaData()方法创建了metadata实例,在这个方法里面带上engine的目的是绑定要连接引擎,当我们对这个metadata实例进行操作的时候就会直接连接到数据库。
添加表结构
设定好连接引擎和元数据,让我们向mysql里面创建表结构来进行测试。
user=Table('user',metadata,
Column('id',Integer,primary_key=True),
Column('name',String(20)),
Column('fullname',String(40)),
)
address_table = Table('address', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', None, ForeignKey('user.id')),
Column('email', String(128), nullable=False)
)
其中Table()方法用来创建表,第一个参数为表明,第二是存入元数据,后面的参数使用Column()方法将数据库当中每一个字段的数据参数设置好。
执行创建
metadata.create_all()
metadata.create_all()
因为已将将表结构存到了metadata里面,然后让metadata执行create_all()方法,这样就向数据库里创建了user和address表。
完成代码
from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
engine=create_engine("mysql+pymysql://root:a5230411@localhost:3306/test",echo=True)
metadata=MetaData(engine)
user=Table('user',metadata,
Column('id',Integer,primary_key=True),
Column('name',String(20)),
Column('fullname',String(40)),
)
address_table = Table('address', metadata,
Column('id', Integer, primary_key=True),
Column('user_id', None, ForeignKey('user.id')),
Column('email', String(128), nullable=False)
)
metadata.create_all()