1 1,首先当然是环境配置
2
3 保证python安装目录下已经有以下两个工具中的一个
4 环境变量path设置已经添加了以下两个工具的路径
5 执行以下命令即可安装成功:
6
7 easy_install SQLAlchemy
8 # 或者
9 pip install SQLAlchemy
10
11
12 当然我使用的是Windows环境,所以倾向于使用setup.py安装,下载压缩包,解压,然后命令提示符下切换到该目录,再运行下面的命令:
13 复制代码 代码如下:
14 python setup.py install
15
16 2,安装cx_Oracle模块
17 pip install cx_Oracle (默认安装最新版本6.1 不推荐此安装方法,因为可能导到与当前python版本不兼容)
18
19 报错:cx_Oracle.DatabaseError: DPI-1050: Oracle Client library must be at version 11.2 错,
20 解决方法:下载低版本的cx_Oracle即可
21
22 卸载安装的模板:
23 pip uninstall cx_Oracle
24
25 https://pypi.python.org/pypi/cx_Oracle/5.3
26 https://sourceforge.net/projects/cx-oracle/files/5.1.2/
27 推荐去网站下载对应的版本的cx_Oracle包
28
29
30 报错:cx_Oracle ORA-24315: 非法的属性类型的解决办法
31 是因为安装的cx_Oracle不是指定数据库的,我们用的是10g的,所以要找10G的cx_Oracle
32
33 报错:以上好了后,如果还不行
34 要查看ORACLE安装的64位的还是32位的,如果是32位的,则cx_Oracle也必须是32位的
35
36
37 2,使用python自带的数据库SQLite3(运行在内存中的)
38
39 #############################################################################
40 1.初始化连接
41
42 from sqlalchemy import create_engine
43 from sqlalchemy.orm import sessionmaker
44 ##DB_CONNECT_STRING = 'mysql+mysqldb://root:123@localhost/ooxx?charset=utf8'
45 ##DB_CONNECT_STRING='oracle://apps:apps@10.0.0.100:1522/VID'
46 DB_CONNECT_STRING='oracle+cx_oracle://zk:gR2b_bs1Qn@bill'
47
48
49 engine = create_engine(DB_CONNECT_STRING, echo=True) ##会返回一个数据库引擎
50 DB_Session = sessionmaker(bind=engine) ###会生成一个数据库会话类
51 session = DB_Session() ##这个类的实例可以当成一个数据库连接,
52
53 说明:
54 这里的 DB_CONNECT_STRING 就是连接数据库的路径。
55 “mysql+mysqldb”指定了使用 MySQL-Python 来连接,
56 “root”和“123”分别是用户名和密码,
57 “localhost”是数据库的域名,
58 “ooxx”是使用的数据库名(可省略),
59 “charset”指定了连接时使用的字符集(可省略)。
60
61 create_engine() 会返回一个数据库引擎,echo 参数为 True 时,会显示每条执行的 SQL 语句,生产环境下可关闭。
62
63 sessionmaker() 会生成一个数据库会话类。
64
65 session = DB_Session() 这个类的实例可以当成一个数据库连接,
66 它同时还记录了一些查询的数据,并决定什么时候执行 SQL 语句。
67 由于 SQLAlchemy 自己维护了一个数据库连接池(默认 5 个连接),因此初始化一个会话的开销并不大。
68
69
70 #############################################################################
71 2,ORM方式,创建表,删除表
72
73 from sqlalchemy import Column
74 from sqlalchemy.types import CHAR, Integer, String
75 from sqlalchemy.ext.declarative import declarative_base
76
77 BaseModel = declarative_base() ##declarative_base() 创建了一个 BaseModel 类,这个类的子类可以自动与一个表关联。
78
79 def init_db():
80 BaseModel.metadata.create_all(engine) ##BaseModel.metadata.create_all(engine) 会找到 BaseModel 的所有子类,并在数据库中建立这些表;
81
82 def drop_db():
83 BaseModel.metadata.drop_all(engine) ##BaseModel.metadata.create_all(engine) 会找到 BaseModel 的所有子类,并在数据库中删除这些表。
84
85
86 class User(BaseModel):
87 __tablename__ = 'user'
88
89 id = Column(Integer, primary_key=True)
90 name = Column(CHAR(30)) # or Column(String(30))
91
92 init_db()
93
94 ##说明:
95 以 User 类为例,它的 __tablename__ 属性就是数据库中该表的名称,
96 它有 id 和 name 这两个字段,分别为整型和 30 个定长字符。
97 Column 还有一些其他的参数,我就不解释了。
98
99 #############################################################################
100 3,ORM方式插入数据
101 user = User(name='b',id=2)
102 session.add(user)
103 session.commit()
104
105 #############################################################################
106 4,ORM方式查询数据
107 query = session.query(User)
108 print query # 显示SQL 语句 SELECT hyy_user.id AS hyy_user_id, hyy_user.name AS hyy_user_name FROM hyy_user
109 print query.statement # 同上 SELECT hyy_user.id, hyy_user.name FROM hyy_user
110 ###---------遍历-----------------
111 for user in query: # 遍历时查询
112 print user.id,user.name
113
114 2 b
115 1 a
116
117 ###---------遍历-----------------
118 for user in query.all(): # 也可以这样遍历时查询(对象组成的列表)
119 print user.id,user.name
120
121
122
123 ###---------排序后遍历-----------------
124 for user in query.order_by(User.name): # 遍历时查询
125 print user.id,user.name
126
127 ##----------按条件查询后遍历-------------------------
128 for value in query2.filter(User.id.in_([1,2])).all():
129 print value.name
130
131
132
133 ##----------查询所有字段-------------------
134
135 print query.all() # 返回的是一个列表,每个元素即是一行数据,即对象(由对象组成的列表) 例:[<__main__.User object at 0x02D57210>, <__main__.User object at 0x02CF56D0>]
136 print query.first().name # 记录不存在时,first() 会返回 None(返回的是第一行数据的一个字段) b
137 print query.filter(User.id == 2).first().name ##获取USER_ID=2的一行数据的name字段
138 print query.filter('id = 2').first().name # 支持字符串 等效于上句,好象有点问题,这句语句
139
140 ##------------查询某个字段-----------------
141
142 query2 = session.query(User.name) ##返回的是一个列表,列表的元素是每行数据的一个字段(由元组组成的列表)
143 print query2 ##SELECT hyy_user.name AS hyy_user_name FROM hyy_user
144 print query2.all() ## [('b',), ('a',)]
145 for user in query2: # 遍历时查询(元组组成的列表)
146 print user[0]
147
148 b
149 a
150
151 ########################## Table 构造器 #################################################
152 Table 构造器(代表了 SQL CREATE TABLE 语句)