Postgre是功能非常强大的数据库管理系统,而且全部开源。MySQL被认为是世界上最流行的数据库,而PostgreSQL被认为是世界上最先进的数据库。PostgreSQL在很多方面都比MySQL强,如复杂SQL的执行、存储过程、触发器、索引。同时PostgreSQL是多进程的,而MySQL是线程的。
1. 导入:
import psycopg2
这个库看起来很奇怪,但是理解之后就会发现容易记忆。
psyco是亢奋、精神病的意思,而pg可以理解为postgre的缩写,是不是觉得开发者是个精力充沛的geek?
2 自然是二代版本,现在已经出来pyscopg3, 但是由于笔者的习惯,这里还是以psycopg2作为案例。
2. 连接数据库:
psycopg2.connect(datebase = , user = , password = , host = )
连接记住connect,后面加上四个数据库必须知道的【库名、用户名、密码、域名】
future_database = {
'database' : 'cc',
'user' : 'ccc',
'password' : '·······',
'host' : '10.21···'
}
conn = psycopg2.connect(database = future_database['database'], user = future_database['user'],password = future_database['password'], host = future_database['host'])
Oracle:
conn_str = user/password@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)\
(HOST=10.21...)(PORT=21010)))(CONNECT_DATA=(SERVICE_NAME=database)))'
conn2 = cx_Oracle.connect(conn_str)
3. 将data转换为dataframe
方法1:
将第三步省去,直接用pd.read_sql 的功能
sql = "SELECT tradedate, contract, symbol, closeprice, settle FROM cta_futures_daily\
WHERE symbol = 'IC' "
df = pd.read_sql(sql, conn, index_col = 'tradedate')
方法二:执行(原理)
connect 之后 就是找到cursor(游标,可以控制资源的分配)
为什么说是游标呢?因为这个相当于指针或引用,从客户端指向SQL私有区域,cursor打开时分配,执行结束时游标关闭并释放。比如Oracle可以通过控制游标数量,防止过度SQL工作区的分配。
cursor = conn.cursor()
cursor.execute("SELECT ···")
dataall = cursor.fetchall()
columnDes = cursor.description # 获取连接对象的描述信息
columnNames = [columnDes[i][0] for i in range(len(columnDes))]
df = pd.DataFrame([list(i) for i in dataall], columns=columnNames)
通过cursor.description 找columns的名字。
数据是list里装了tuple,因此要将每一个tuple转为list