SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchmey采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。

安装

pip3 install SQLAlchemy

pip3 install pymysql  #需要pymysql或者MySQLdb的支持

连接数据库

mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

下面我们看一个例子:

#导入想关模块
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship engine = create_engine("mysql+pymysql://root:123456@192.168.11.12:3306/haha", encoding='utf-8', max_overflow=5) # DBSession = sessionmaker(bind=engine)
#实例化
Base = declarative_base() # 主机表
class Host(Base): #声明类
__tablename__ = 'host' #需要创建的表名
nid = Column(Integer, primary_key=True, autoincrement=True)  #定义主键,自增1 ,其实这里还可以有其他参数
hostname = Column(String(32))
ip = Column(String(32), unique=True)
port = Column(String(32))
host_user = relationship('HostUser',secondary=lambda: HostToHostUser.__table__,backref='h')#映射表的外键 # 主机用户表
class HostUser(Base):
__tablename__ = 'host_user'
nid = Column(Integer, primary_key=True, autoincrement=True)
username = Column(String(32))
passwd = Column(String(32)) # 主机用户与主机关系表
class HostToHostUser(Base):
__tablename__ = 'host_to_hostuser'
nid = Column(Integer, primary_key=True, autoincrement=True)
user_nid = Column(Integer, ForeignKey('host_user.nid'))
host_nid = Column(Integer, ForeignKey('host.nid'))
host = relationship('Host', backref='h')
host_user = relationship('HostUser', backref='u') # 审计表
class AuditLog(Base):
__tablename__ = 'audit_log'
nid = Column(Integer, primary_key=True)
user_nid = Column(Integer, ForeignKey('host_user.nid'))
host_nid = Column(Integer, ForeignKey('host.nid'))
cmd = Column(String(255))
date = Column(String(255)) def init_db():
Base.metadata.create_all(engine) def drop_db():
Base.metadata.drop_all(engine) init_db() Session = sessionmaker(bind=engine)
session = Session()
#
# session.add_all((
Host(hostname='web1', ip='192.168.11.12', port='22', ),
Host(hostname='web2', ip='192.168.11.23', port='22', ),
Host(hostname='web3', ip='192.168.11.34', port='22', ),
Host(hostname='web4', ip='192.168.11.45', port='22', ),
Host(hostname='web5', ip='192.168.11.228', port='22', ),
))
session.commit() session.add_all([
HostUser(username='madking', passwd='123', ),
HostUser(username='oldboy', passwd='123', ),
])
session.commit() session.add_all((
HostToHostUser(user_nid='1', host_nid='1', ),
HostToHostUser(user_nid='1', host_nid='2', ),
HostToHostUser(user_nid='1', host_nid='5', ),
HostToHostUser(user_nid='2', host_nid='1', ),
))
session.commit()

sqlalchemy操作Mysql的更多相关文章

  1. 13、Flask实战第13天:SQLAlchemy操作MySQL数据库

    安装MySQL 在MySQL官网下载win版MySQL 双击运行 后面根据提示设置密码然后启动即可,这里我设置的密码是:123456 我们可以通过Navicat客户端工具连接上MySQL addres ...

  2. 【tips】ORM - SQLAlchemy操作MySQL数据库

    优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...

  3. 【python】-- SQLAlchemy操作MySQL

    ORM.SQLAchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是 ...

  4. 通过sqlalchemy操作mysql

    # 安装 pip3 install sqlalchemy import sqlalchemy from sqlalchemy import create_enginefrom sqlalchemy.e ...

  5. Python 使用sqlalchemy操作MYSQL

    1. 安装sqlalchemy库 SQL操作引擎可能需要pymysql,故要安装如下两个程序 pip install sqlalchemy pip instal pymysql

  6. flask中使用SQLAlchemy操作mysql的一些注意事项和坑

    一 ImportError: cannot import name 'db' 由于app最后才加载,所以其他文件,比如models.py不能从app.py导入任何变量, 要使用db可以先定义一个,之后 ...

  7. python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy

    内容一览: 1.Python操作MySQL数据库 2.ORM sqlalchemy学习 1.Python操作MySQL数据库 2. ORM sqlachemy 2.1 ORM简介 对象关系映射(英语: ...

  8. Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy

    Mysql基础 一.安装 Windows: 1.下载 http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.31-winx64.zip 2.解压 ...

  9. flask 操作mysql的两种方式-sqlalchemy操作

    flask 操作mysql的两种方式-sqlalchemy操作 二.ORM sqlalchemy操作 #coding=utf-8 # model.py from app import db class ...

随机推荐

  1. C语言初学 if-else语句判别在ASCII值中小于32的可控制符的类型

    #include<stdio.h> main() { char c; printf("输入一个符号\n"); c=getchar(); if(c<32) prin ...

  2. k-means均值聚类算法(转)

    4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时候上述条件得不到满足,尤其是在 ...

  3. iOS学习之下拉刷新

    今天我们来给昨天的Demo加上下拉刷新和上拉加载更多的功能. 1.下拉刷新. 在viewDidLoad中调用方法addRefreshControl,下拉时可以出现风火轮加载更多的效果. - (void ...

  4. ubuntu12.04安装jdk-7u79-linux-i586.tar.gz

    第一步:下载jdk-7u79-linux-i586.tar.gz 1.wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux ...

  5. BZOJ 2115: [Wc2011] Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2794  Solved: 1184 [Submit][Stat ...

  6. 利用好CSS,实现Qt控件美化

    一.CSS概念 级联样式表 (CSS) 包含应用于网页中的元素的样式规则.CSS 样式定义元素的显示方式以及元素在页中的放置位置.可以创建一个通用规则,只要 Web 浏览器遇到一个元素实例,或遇到一个 ...

  7. Qt编程之数据流图(dataflow diagram)的编写

    不知道怎么搞. 在网上搜了一些资料,说是有提供的Demo样例 https://forum.qt.io/topic/18472/dataflow-programming-gui/4 http://sta ...

  8. [转]RegOpenKeyEx函数失败的问题

    在使用这个函数RegOpenKeyEx的时候,老是执行不成功,函数本身返回2,GetLastError返回0.在CSDN上查阅资料说是返回2的原因是注册表中对应路径不存在,可是我电脑中注册表那个键值明 ...

  9. VS2010安装与测试编译问题(fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt)

    由于第三方库的各种原因,与编译冲突问题,公司又决定把整个项目都统一改用VS2010来编译.所以我把我开发机上的VS2008卸载了,又重新安装了VS2010.无奈出现了COFF格式转换问题.搜索了下.完 ...

  10. Asp.Net 构架(Http Handler 介绍) - Part.2

    原文地址:http://www.cnblogs.com/JimmyZhang/archive/2007/09/15/894124.html 引言 在 Part.1 Http请求处理流程 一文中,我们了 ...