0
点赞
收藏
分享

微信扫一扫

comp3311-week7-辅导

编程语言的模板

Common DB access API used in programming languages

db = connect_to_dbms(DBname,User/Password);
query = build_SQL("SqlStatementTemplate",values);
results = execute_query(db,query);
while (more_tuples_in(results))
{
tuple = fetch_row_from(results);
// do something with values in tuple ...
}

在Python中迭代每一条tuple是很耗费精力的。尽量使用dbms的query去处理大量数据。

Psycopg2

cur = conn.cursor()
set up a handle for performing queries/updates on database
must create a cursor before performing any DB operations
conn.close()
close the database connection conn
conn.commit()
commit changes made to database since last commit()

python 基础

Python(i)部分讲得太基础了。。。

Python(ii)

标准用法是使用异常处理:

import psycopg2 # include the module definitions
try:
connnection = psycopg2.connect("dbname=Datatase")
cursor = connnection.cursor()
cursor.excute("SQL Query")
for tuple in cursor.fetchall():
# do something with next tuple
cursor.close()
connection.close()
except:
print("Database error")

嵌套

语句也可以嵌套使用,同一个corsor,在循环外执行一次语句,循环内还可以继续调用同一个corsor去执行sql代码。
但是这样的嵌套尽量不要去做,而是使用sql语句完成复杂的操作,我们只对结果做遍历处理。

cur = conn.cursor()
qry = "select id, name from Beers"
cur.execute(qry)
for tuple in cur.fetchall():
q2 = """select b.name, s.price
from Bars b join Sells s on (b.id=s.bar)
where s.beer = %s"""
print(tuple[1])
cur.execute(q2, [tuple[0]])
n, tot = 0, 0.0
for t in cur.fetchall():
print("\t"+t[0],"@",t[1])
n = n + 1
tot = tot + t[1]
if n > 0:
print("\tAverage @", tot/n)
else:
print("\tNot sold anywhere")

tricks

​cur.fetchmany(#tuples)​


举报

相关推荐

0 条评论