python使用sqlalchemy连接mysql数据库

时间:2024-11-13 16:05:14

环境:centos7+python2.7.5+sqlalchemy

sqlalchemy是python当中比较出名的orm程序。在python中,使用sqlalchemy连接mysql数据库进行操作非常简单方便。

什么是orm:

orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却都是关系型的,为了保证一致的使用习惯,通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直接使用sql语言。

安装sqlalchemy

在使用sqlalchemy之前要先给python安装mysql驱动,这里推荐使用pymysql。  下载地址:https://github.com/PyMySQL/PyMySQL

python setup.py install
安装后检查
>>>import pymysql

然后再安装sqlalchemy 。 下载地址:https://github.com/zzzeek/sqlalchemy

python setup.py install
安装后检查
>>>import sqlalchemy

如何使用sqlalchemy连接mysql?

通过import导入必要的包

from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey

创建元数据

什么是元数据?元数据就是描述数据的数据,举个简单的例子,小明身高175cm,体重65kg,性别男。其中身高,体重,性别就是元数据。当我们创建好连接引擎以后可以通过这个引擎抓取元数据。

metadata=MetaData(engine)

通过MetaData()方法创建了metadata实例,在这个方法里面带上engine的目的是绑定要连接引擎,当我们对这个metadata实例进行操作的时候就会直接连接到数据库。

创建一个连接引擎

engine=create_engine("mysql+pymysql://root:123456@localhost:3306/test",echo=True)

我们将连接引擎放到engine里面方便后面使用。
create_engine("数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库",其他参数)
上文当中echo=True是开启调试,这样当我们执行文件的时候会提示相应的文字。

添加表结构

设定好连接引擎和元数据,让我们向mysql里面创建表结构来进行测试。

user_table = 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里面,然后让metadata执行create_all()方法,这样就向数据库里创建了user和address表。

完成代码

  #vim sqlalchemy_test1.py

  from sqlalchemy import create_engine,Table,Column,Integer,String,MetaData,ForeignKey
  engine=create_engine("mysql+pymysql://root:123456@192.168.11.66:3306/test",echo=True)
  metadata=MetaData(engine)
  user_table = 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()

执行脚本: #python sqlalchemy_test1.py

手动登陆数据库,查看test库里是否有刚创建的 user, address两个表和表结构。

——————————————————————————————————————————————

其它:   python使用pymysql模块连接操作数据库方式,如下:

import pymysql.cursors

# Connect to the database
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor) try:
with connection.cursor() as cursor:
# Create a new record
sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
cursor.execute(sql, ('webmaster@python.org', 'very-secret')) # connection is not autocommit by default. So you must commit to save
# your changes.
connection.commit() with connection.cursor() as cursor:
# Read a single record
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
finally:
connection.close()