SQLAlchemy 教程

ORM 全称 Object Relational Mapping, 关系数据库的表结构映射到对象上
这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。
 
1 连接数据库
# coding: utf-8
from sqlalchemy import create_engine
engine = create_engine('mysql+mysqldb://root:密码@机器名:3306/数据库'?charset=utf8mb4",
echo=True, encoding='utf-8', convert_unicode=True, isolation_level='AUTOCOMMIT')
 
* create_engine()用来初始化数据库连接。SQLAlchemy用一个字符串表示连接信息:
'数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名
mysql的utf8字符集最多只支持3字节表示的字符,对于4字节的utf8字符需要用utf8mb4代替。
' echo= Ture/False(echo=Ture  会显示在加载数据库所执行的SQL语句,False不显示) 
encoding=‘utf-8’convert_unicode=Ture 表示指定字符的编码、解码
事务隔离级别(IsolationLevel)
例子:
#from sqlalchemy import *
import os, getopt, sys
from sqlalchemy import *
#通过pymysql与mysql数据库建立远程连接
def engineName(dbname):
if 'tj00' == dbname:
return create_engine("mysql+pymysql://root:[email protected]:3306/zhangnan?charset=utf8mb4",
echo=True, encoding='utf-8', convert_unicode=True, isolation_level='AUTOCOMMIT'),
else:
print('wrong arg')
 
 
def main():
opts, args = getopt.getopt(sys.argv[1:], [], ['db='])
for op, value in opts:
if op == '--db':
targetEngine = engineName(value)
print(targetEngine)
else:
print('wrong arg', opts)
 
 
if __name__ == '__main__':
print('$start')
main()
print('$done')
运行得到:
$start
$done
2创建表结构
你的表格必须已经在MetaData集合中。我们将要创建简单(handy)表格的MetaData,并自动连接到引擎(将一个模式(schema)对象连接到引擎成为绑定binding):
  在sqlalchemy.schema包里有数据库关系的描述,列举几个最常用的:
   字段:Column
   索引:Index
   表:Table
 数据类型在sqlalchemy.types包,列举几个最常用的:
   二进制:BIGINT
   布尔:BOOLEAN
   字符:CHAR
   可变字符:VARCHAR
   日期:DATETIME
   操作方法在sqlalchemy.sql包里,列举几个最常用的:
   execute,update,insert,select,delete,join等
 例:创建名为users的表,有四个字段:id,name,fullname,password
   String在mysql里其实就是varchar
创建表结构
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50)),
Column('fullname', String(50)),
Column('password', String(100))
)
metadata.create_all(engine) 向数据库发出建表完成类与表的映射使创建的表生效
注:MetaData是我们与数据库打交道的一个接口。需要使用MetaData来发出CREATE TABLE的命令。下面我们使用MetaData.create_all()指令,将我们上面得到的Engine作为参数传入。如果你上面设置了echo为True的话,应该可以看到这一过程中的SQL指令。首先检查了users表的存在性,如果不存在的话会执行表的创建工作。
创建映射关系(users表格已经存在,让SQLAlchemy自动从数据库装入定义)
1 from sqlalchemy.orm import mapper
2 metadata = MetaData(engine)
3 users_table = Table('users', metadata, autoload=True)
4 print users_table.columns
 
AttributeError: 'tuple' object has no attribute 'run_callable'             ??????????????
 

猜你喜欢

转载自www.cnblogs.com/znnbk/p/10684709.html