psycopg2 (python与postgresql)
#快速导入数据到postgresql
import pandas as pd
import psycopg2
from io import StringIO
def sql_to_df():
con=pymysql.connect(**conf["mysql_form"])
sql="select category_id,name,gameid,img_url from category where category_id in (11665,9653,6504) "
try:
with con.cursor() as cur:
cur.execute(sql)
datas=cur.fetchall()
finally:
con.close()
df=pd.DataFrame(list(datas))
return df
def df_to_pg(df=None,db="spider",table='price_730'):
#这里生成的StringIO类似于file文件,可read,可write,不同的是file是在硬盘上的文件,而StringIO是在内存中的文件
output=StringIO()
#也可以直接将字符串转换成内存文件 ,
#将数据保存到‘文件’
if not df :
df=sql_to_df()
df.to_csv(output,sep='\t',index=False,header=False)
#使文件定位到第一个字符
output.seek(0)
try:
conn=psycopg2.connect(database=db,**conf["postgres"])
cur=conn.cursor()
cur.copy_from(output,table,null='')
conn.commit()
result=cur.rowcount
finally:
cur.close()
conn.close()
return result
if __name__=='__main__':
# df=pd.read_csv('e:/730_price.csv')
print(df_to_pg(table="category"))
建立连接
使用*.ini文件(python的configparser包可以解析这种类型的配置文件)保存数据库连接的配置信息。
使用psycopg2.connect函数获得connection对象。
使用connection对象创建cursor对象。
使用cursor对象执行sql语句提交或者回滚transaction。
使用cursor对象fetchone获得查询结果。
关闭cursor对象和connection对象。
创建数据表
过程:
构造建表的sql语句
调用psycopg2.connect()方法获得connection对象
调用connection.cursor()方法获得cursor对象
调用cursor.execute()方法执行sql语句
调用connection.commit方法提交事务
调用cursor.close()和connection.close()方法关闭连接
插入行
构造插入语句, 使用%s作为占位符,执行时psycopg2会用值智能替换掉占位符。可以添加RETURNING字句,来得到自动生成的字段值。
同创建数据表的2,3。获得connection对象和cursor对象
使用cursor.execute方法来插入一行,使用cursor.executemany方法来插入多行。 execute方法的第一个参数是sql语句,第二个参数是值的tuple。executemany方法的第一个参数是sql语句,第二个参数是list of tuple。
如果在1中使用了RETURNING子句,可以使用cursor.fetchone方法,来获得返回的自动生成字段的值。
同上5
同上6
更新数据
基本上和插入行相同。
使用cursor.rowcount属性来获得受影响的行的数目。
transaction
connection对象负责管理事务。当你第一次使用cursor.execute方法执行sql语句的时候事务开启,这以后的所有sql语句都在这个事务中执行,直到connection.commit或者connection.rollback或者del connection或者connection.close被调用,事务才结束。
一个简单的select语句可能会开启一个事务并且对相应的表格加锁,所以如果你是在开发一个长时间运行的应用,而且一个连接长时间不使用,那么你需要调用commit或者rollback方法结束事务,避免不必要的问题。
使用connection.autocommit来控制事务
从psycopg2.5开始,connection和cursor都是context manager对象,可以在with ... as ...语句中使用。值得注意的是,离开with语句后,connection对象不会被close,它只是结束提交或者回滚事务。所以可以在多个with语句中使用connection对象。
调用存储过程
使用cursor.callproc('function name', tuple), 函数的第一个参数是存储过程的名字,函数的第二个参数是实参tuple。这个调用和cursor.execute('select * from functionanme(%s)', tuple)相同。
可以使用cursor.fetchone, cursor.fetchmany, cursor.fetchall来获得返回值。
blob对象
使用psycopg2.Binary对象和postgresql的BYTEA数据类型对应,用于存储二进制数据。
以下这个例子演示了二进制数据的存取。
config.py
de >
def config():
db_conn_config = {
'host': 'localhost',
'user': 'postgres',
'password': '',
'dbname': 'test',
'port': 5432
}
return db_conn_config
de>
write_blob.py
de >
import psycopg2
from config import config
def write_blob(path_to_file):
""" insert a BLOB into a table """
conn = None
try:
# read data from a picture
drawing = open(path_to_file, 'rb').read()
# read database configuration
params = config()
# connect to the PostgresQL database
conn = psycopg2.connect(**params)
# create a new cursor object
cur = conn.cursor()
# execute the INSERT statement
cur.execute("INSERT INTO parts_drawings(drawing_data,name) " +
"VALUES(%s,%s)",
(psycopg2.Binary(drawing), path_to_file))
# commit the changes to the database
conn.commit()
# close the communication with the PostgresQL database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
if __name__ == '__main__':
write_blob('./1.jpg')de>
read_blob.py
de >
from config import config
import psycopg2
def read_blob(id, path_to_dir):
""" read BLOB data from a table """
conn = None
try:
# read database configuration
params = config()
# connect to the PostgresQL database
conn = psycopg2.connect(**params)
# create a new cursor object
cur = conn.cursor()
# execute the SELECT statement
cur.execute(""" SELECT *
FROM parts_drawings
WHERE id = %s """,
(id,))
blob = cur.fetchone()
open(path_to_dir + str(blob[0]) + '.jpg', 'wb').write(blob[1])
# close the communication with the PostgresQL database
cur.close()
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
if __name__ == '__main__':
read_blob(1, './img/')
de>
查询数据
查询数据和其它操作类似。
可以使用cursor.fetchone, cursor.fetchall, cursor.fetchmany(size=cursor.arraysize)方法来返回查询结果。fetchone返回一个tuple或者None, fetchall返回一个list of tuple,如果没有结果则返回一个空的tuple。fetchmany返回list of tuple, list的长度由size参数决定,size的默认值是cursor.arraysize, 如果没有结果可以返回,那么返回一个空的list。
删除数据
和更新数据类似
可以使用cursor.rowcount来获得删除的行数目。
psycopg2 (python与postgresql)的更多相关文章
- Python:使用psycopg2模块操作PostgreSQL
安装psycopg2模块: 怎么验证是否已经安装过psycopy2? 编写上面代码,运行看是否抛出缺少psycopg2模块. 安装方法1: 1)使用psycopg2-2.4.2.win-amd64-p ...
- python 安装PostgreSQL 模块:psycopg2
官方资料:http://www.psycopg.org/psycopg/docs/ 安装: yum -y install python-psycopg2 (安装的版本可能是2.0) pip insta ...
- 9、Python 连接 PostgreSQL数据库 -- psycopg2
1.cmd pip install psycopg2 -- 提示错误信息 2.pip show pip -->查看当前pip版本 3.python -m pip install --upg ...
- Python使用psycopg2模块操作PostgreSQL
https://blog.csdn.net/pcent/article/details/78643611
- PostgreSQL连接python,postgresql在python 连接,创建表,创建表内容,插入操作,选择操作,更新操作,删除操作。
安装 PostgreSQL可以用Python psycopg2模块集成. sycopg2是Python编程语言的PostgreSQL数据库的适配器. 其程序代码少,速度快,稳定.不需要单独安装这个模块 ...
- python连接postgresql数据库
python可以通过第三方模块连接postgresql. 比较有名的有psycopg2 和python3-postgresql (一)psycopg2 ubuntu下安装 sudo apt-get ...
- python 操作PostgreSQL
pip install psycopg Python psycopg2 模块APIs 以下是psycopg2的重要的的模块例程可以满足Python程序与PostgreSQL数据库的工作. S.N. A ...
- python连接postgreSQL
利用python(我用的是python2.7版本)连接postgresql数据库,这里使用psycopg2这个插件 官网下载psycopg2-2.5.1.tar.gz:http://initd.org ...
- Python 操作 PostgreSQL 数据库
我使用的是 Python 3.7.0 PostgreSQL可以使用psycopg2模块与Python集成. sycopg2是用于Python编程语言的PostgreSQL数据库适配器. psycopg ...
随机推荐
- JavaScript:Delete属性
以前,我就晓得delete只能够删除隐性属性(就是没有进行声明的变量),但是不知道为什么这样? 隐性属性:在页面中以前没有声明过该变量,直接进行赋值的 str='hongda' 其实这是由属性的特性决 ...
- HDU1043 Eight(八数码:逆向BFS打表+康托展开)题解
Eight Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- C#学习笔记(四):switch语句
条件语句 switch语句快速生成枚举方法,复制枚举名在switch()里,双击TAB 快速生成方法,用纠错功能 随机数 using System; using System.Collections. ...
- Linux——进程管理学习简单笔记
基本概念: 进程和程序的区别 : 1.程序是静态概念,本身作为一种软件资源长期保存:而进程是程序的执行过程,它是动态概念,有一定的生命期,是动态产生和消亡的. 2.程序和进程无一一对应关系.一个程序可 ...
- Python 获取文件的创建时间,修改时间和访问时间
# 用到的知识# os.path.getatime(file) 输出文件访问时间# os.path.getctime(file) 输出文件的创建时间# os.path.getmtime(file) 输 ...
- 《剑指offer》第三十九题(数组中出现次数超过一半的数字)
// 面试题39:数组中出现次数超过一半的数字 // 题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例 // 如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, ...
- js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题
js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...
- 合并两个dt
C#代码中实现两个表(DataTable)的关联查询(JOIN) 之前通常都是使用SQL直接从数据库中取出表1和表2关联查询后的数据,只需要用一个JOIN就可以了,非常方便.近日遇到一种情况,两个 ...
- codeforces 930b//Game with String// Codeforces Round #468 (Div. 1)
题意:一个串,右循环移位后,告诉你第一个字母,还能告诉你一个,问你能确定移位后的串的概率. 用map记录每个字母出现的位置.对于每个字母,用arr[j][k]记录它的所有出现位置的后j位是字母k的个数 ...
- WebView 实现JS效果和a标签的点击事件
目前很多android app都可以显示web页面的界面,嵌入式开发,这个界面一般都是WebView这个控件加载出来的,学习该控件可以为你的app开发提升扩展性. 先说下WebView的一些优点: 可 ...