sqlalchemy数据库分层操作

服务器

浏览数:145

2019-9-2

 在学习sqlalchemy操作中,最常见的就是如下的示例,一个文件基本上包含了数据库的增删改查。sqlalchemy的具体操作我就不再详细说明了。流程大概是:

  1. 定义表
  2. 创建数据库引擎
  3. 创建表
  4. 插入数据
  5. 查询数据
 1 #coding:utf-8
 2 
 3 from sqlalchemy import Column,String,create_engine,MetaData
 4 from sqlalchemy.orm import sessionmaker
 5 from sqlalchemy.ext.declarative import declarative_base
 6 from sqlalchemy.dialects.mysql import INTEGER,CHAR
 7 
 8 Base = declarative_base()
 9 
10 meta = MetaData()
11 
12 
13 #定义User对象
14 class User(Base):
15     __tablename__ = 'user_one'
16 
17     id = Column(String(20),primary_key=True)
18     name = Column(String(20))
19 
20 #初始数据库连接
21 engine = create_engine('mysql+mysqldb://root:123@localhost:3306/test')
22 
23 #创建DBsession
24 DBSession = sessionmaker(bind=engine)
25 
26 #创建session会话,数据库操作的基石。
27 session = DBSession()
28 
29 #在数据库中创建表user
30 User.metadata.create_all(bind=engine)
31 
32 #插入数据
33 new_user = User(id='1',name='kiit')
34 
35 #提交数据到session
36 session.add(new_user)
37 
38 #提交到数据库
39 session.commit()
40 
41 #查询User表
42 user_data = session.query(User).all()
43 
44 #关闭session连接
45 session.close()
46 
47 #循环将返回的数据打印
48 for i in user_data:
49     print i.id,i.name

而在实际的生产环境中根本不可能使用一个文件完成数据的这么多的操作。数据库的操作大体分为:增、删、改、查 。那么就分为这四个部分去完成数据的操作

1、定义数据库

models.py

 1 #coding:utf-8
 2 
 3 from sqlalchemy import Column,CHAR,INTEGER
 4 from sqlalchemy.ext.declarative import declarative_base
 5 
 6 Base = declarative_base()
 7 
 8 class User(Base):
 9     __tablename__ = "user"
10 
11     id = Column(CHAR(20),primary_key = True)
12     name = Column(CHAR(20))
13 
14 
15 class Solary(Base):
16     __tablename__ = "solary"
17  
18     id = Column(INTEGER,primary_key = True)
19     name = Column(CHAR(20))
20     num =  Column(CHAR(20)) 

2、创建数据库

sql_create.py

 1 #coding:utf-8
 2 
 3 from sqlalchemy import create_engine
 4 from models import *
 5 
 6 engine = create_engine('mysql+mysqldb://root:123@localhost:3306/test')
 7 
 8 def create_table(table_name):
 9     table_name.metadata.create_all(engine)
10     print "创建成功"

3、插入数据

sql_insert.py

 1 #coding:utf-8
 2 
 3 from sqlalchemy.orm import sessionmaker
 4 from sqlalchemy.ext.declarative import declarative_base
 5 from sqlalchemy.dialects.mysql import INTEGER,CHAR
 6 from sqlalchemy import create_engine,Column
 7 
 8 
 9 def insert(new_data):
10 
11     Base = declarative_base()   
12     engine = create_engine('mysql+mysqldb://root:123@localhost:3306/test')
13     print "创建数据库引擎"
14 
15     DBSession = sessionmaker(bind=engine)
16     session = DBSession()
17     print "创建session对象"
18         
19     session.add(new_data)
20     print "添加数据到session"
21 
22     session.commit()
23     print "提交数据到数据库"
24 
25     session.close()
26     print "关闭数据库连接"
27 
28 if __name__ == "__main__":
29     insert(User)

 4、查询数据

sql_select.py

 1 #coding:utf-8
 2 
 3 from sqlalchemy.orm import sessionmaker
 4 from sqlalchemy import create_engine
 5 from models import *
 6 
 7 def select(table_name):
 8     engine = create_engine("mysql+mysqldb://root:123@localhost:3306/test")
 9     print "初始化数据库引擎"
10 
11     DBSession = sessionmaker(bind=engine)
12     session = DBSession()
13     print "创建session对象"
14 
15     table_data = session.query(User).all()
16     print "查询"
17 
18     session.close()
19 
20     return table_data
21 
22 
23 if __name__ == "__main__":
24     select_fun(User)

 5、使用增,删,改函数

test.py

 1 #coding:utf-8
 2 
 3 from models import *
 4 from sql_create import * 
 5 from sql_select import *
 6 
 7 
 8 create_table(Solary)
 9 
10 new_user = User(id="8",name="miko")
11 
12 insert(new_user)
13 print "产生新的用户"
14 
15 
16 data = select(User)
17 
18 for i in data:
19     print i.id,i.name

函数化操作的好处就是避免重复代码,并且能够解开耦合。想要查询数据库时不需要先定义table,想要删除数据库时不需要再创建引擎。以上代码经过多次测试,亲测可用。

作者:金色旭光