Skip to content

Commit 4d0983d

Browse files
committed
add python_sqlalchemy, and fix bugs in python_base
1 parent 431283a commit 4d0983d

3 files changed

Lines changed: 99 additions & 2 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
### python_weibo.py: “史上最详细”的Python模拟登录新浪微博流程
1212

1313
### python_lda.py: 玩点高级的--带你入门Topic模型LDA(小改进+附源码)
14+
15+
### python_sqlalchemy: SQLAlchemy入门代码文档
1416
============================================================
1517

1618
### 您可以fork该项目,并在修改后提交Pull request

python_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@
137137
#-- 内置str处理函数:
138138
str1 = "stringobject"
139139
str1.upper(); str1.lower(); str1.swapcase(); str1.capitalize(); str1.title() # 全部大写,全部小写、大小写转换,首字母大写,每个单词的首字母都大写
140-
str1.ljust(width) # 获取固定长度,右对齐,左边不够用空格补齐
141-
str1.rjust(width) # 获取固定长度,左对齐,右边不够用空格补齐
140+
str1.ljust(width) # 获取固定长度,左对齐,右边不够用空格补齐
141+
str1.rjust(width) # 获取固定长度,右对齐,左边不够用空格补齐
142142
str1.center(width) # 获取固定长度,中间对齐,两边不够用空格补齐
143143
str1.zfill(width) # 获取固定长度,右对齐,左边不足用0补齐
144144
str1.find('t',start,end) # 查找字符串,可以指定起始及结束位置搜索

python_sqlalchemy.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# _*_ coding: utf-8 _*_
2+
3+
"""
4+
python_sqlalchemy.py by xianhu
5+
"""
6+
7+
import sqlalchemy
8+
import sqlalchemy.orm
9+
import sqlalchemy.ext.declarative
10+
11+
# 利用数据库字符串构造engine, echo为True将打印所有的sql语句
12+
engine = sqlalchemy.create_engine("mysql+pymysql://username:password@hostname/dbname", encoding="utf8", echo=True)
13+
14+
15+
"""
16+
# 利用engine创建connection,这里不需要close操作
17+
with engine.connect() as conn:
18+
# 最基础的用法
19+
result = conn.execute("select * from tablename limit 10;")
20+
for item in result:
21+
print(item)
22+
23+
# execute的几种用法,这里具体还是得参考pymysql的用法,这里不需要执行commit操作
24+
conn.execute("insert into tablename(id, url, title) values(1, "url1", "title1");")
25+
conn.execute("insert into tablename(id, url, title) values(%s, %s, %s);", 2, "url2", "title2")
26+
conn.execute("insert into tablename(id, url, title) values(%s, %s, %s)", (3, "url3", "title3"))
27+
conn.execute("insert into tablename(id, url, title) values(%s, %s, %s)", [(31, "url31", "title31"), (32, "url32", "title32")])
28+
29+
# 使用事务可以进行批量提交和回滚
30+
trans = conn.begin()
31+
try:
32+
conn.execute("insert into tablename(id, url, title) values(%s, %s, %s)", [(4, "url4", "title4"), (5, "url5", "title5")])
33+
trans.commit()
34+
except Exception as excep:
35+
trans.rollback()
36+
raise
37+
"""
38+
39+
# 利用ORM特性生成模型
40+
Base = sqlalchemy.ext.declarative.declarative_base()
41+
42+
43+
# 构建模型User
44+
class User(Base):
45+
__tablename__ = "User"
46+
id = sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True, autoincrement=True)
47+
name = sqlalchemy.Column("name", sqlalchemy.String(50), default="", unique=True)
48+
age = sqlalchemy.Column("age", sqlalchemy.Integer, nullable=False)
49+
50+
# 利用Session对象连接数据库
51+
DBSessinon = sqlalchemy.orm.sessionmaker(bind=engine) # 创建会话类
52+
session = DBSessinon() # 创建会话对象
53+
54+
# 创建表(如果表已经存在,则不会创建)
55+
Base.metadata.create_all(engine)
56+
57+
try:
58+
# 清空数据,不需要commit操作
59+
session.query(User).filter(User.id != -1).delete()
60+
61+
# 插入数据,这里的一个user只插入一次,第二次插入不生效
62+
user = User(name="tobi", age=20)
63+
session.add(user)
64+
session.commit()
65+
66+
# 修改数据
67+
user.name = "allen"
68+
session.merge(user) # 使用merge方法,如果存在则修改,如果不存在则插入
69+
session.query(User).filter(User.id == user.id).update({"name": "carol"}) # 使用update方法
70+
71+
# 查询数据
72+
users = session.query(User) # 返回全部结果
73+
for user in users:
74+
print(user.id, user.name, user.age)
75+
user = session.query(User).get(2) # 返回结果集的第二项
76+
users = session.query(User)[1:3] # 返回结果集中的第2-3项
77+
78+
# 其他高级查询
79+
user = session.query(User).filter(User.id < 6).first() # 条件查询
80+
users = session.query(User).order_by(User.name) # 排序查询
81+
users = session.query(User).order_by(sqlalchemy.desc(User.name)) # 排序查询之倒序
82+
users = session.query(User.id, User.name) # 只查询部分属性
83+
users = session.query(User.name.label("user_name")).all() # 给结果集的列取别名
84+
for user in users: print(user.user_name) # 这里使用别名
85+
users = session.query(sqlalchemy.distinct(User.name)).all() # 去重查询
86+
user_count = session.query(User.name).count() # 统计全部数量
87+
age_avg = session.query(sqlalchemy.func.avg(User.age)).first() # 求平均值
88+
age_sum = session.query(sqlalchemy.func.sum(User.age)).first() # 求和运算
89+
users = session.query(sqlalchemy.func.count(User.name).label("count"), User.age).group_by(User.age) # 分组查询
90+
for user in users:
91+
print("age:{0}, count:{1}".format(user.age, user.count))
92+
93+
except Exception as excep:
94+
session.rollback()
95+
raise

0 commit comments

Comments
 (0)