• python连接PostgreSQL


    1. 常用模块

    # 连接数据库

    connect()函数创建一个新的数据库连接对话并返回一个新的连接实例对象

    PG_CONF_123 = {
        'user':'emma',
        'port':123,
        'host':'192.168.1.123',
        'password':'emma',
        'database':'dbname'}
    conn = psycopg2.connect(**PG_CONF_123)
    

    # 打开一个操作整个数据库的光标

    连接对象可以创建光标用来执行SQL语句

    cur = conn.cursor()
    

    # 执行一个创建表的SQL语句

    光标可以使用execute()和executemany()函数

    cur.execute("CREATE TABLE test (id serial PRIMARY KEY, num integer, data varchar);")
    

    # 传递参数给插入语句

    cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)",(100, "abc'def"))
    

    # 执行查询语句并将获取到的数据作为python对象

    cur.execute("SELECT * FROM test;")
    cur.fetchone()
    (1, 100, "abc'def")
    

     

    提交修改

    如果只使用查询语句不用commit方法,insert/update/delete等操作需要调用commit()。rollback()函数用于会滚到上次调用commit()方法之后。

    conn.commit()
    

    # 关闭数据库连接

    cur.close()
    conn.close()
    

    2. 防范SQL注入漏洞

    典型的SQL注入漏洞形式:

    SQL = "select * from userinfo where id = '%s'" % (id)

    SQL = "select * from userinfo where id = '{}'".format(id)

    如果有人恶意攻击,在传入参数的代码中加入恶意代码,如:

    request.id = '123; drop tabel userid;'

    会造成严重风险,为防止此问题,应该通过第二位变量传入参数的方法:%s(无论变量是什么数据类型,都使用%s)

    SQL = "INSERT INTO authors (name) VALUES (%s);" # Note: no quotes
    data = ("O'Reilly", )
    cur.execute(SQL, data) # Note: no % operator
    
  • 相关阅读:
    Oracle查看占用表空间最大的表(排序)
    Access denied for user 'test'@'%' to database 'mysql'
    DB2新建编目及删除编目
    DB2备份恢复schema
    Linux/Aix日常报错整理
    Oracle查看存储过程最后编辑时间
    No X11 DISPLAY variable was set
    数据库的数据进行改动,Cognos报表展示未及时更新
    Oracle数据库学习笔记_常用分区partition操作语句
    Oracle数据库学习笔记_sql 语句NVL()用法
  • 原文地址:https://www.cnblogs.com/guoxueyuan/p/7772435.html
Copyright © 2020-2023  润新知