暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Python操作postgresql数据库

算法工程师的学习日志 2021-10-13
1323

1、安装 psycopg2

    pip install psycopg2 -i https://pypi.tuna.tsinghua.edu.cn/simple

    2、连接数据库

    每条完整的sql执行步骤如下:

    • 建立连接获得 connect 对象

    • 获得游标对象,游标对象可以对数据库进行执行操作

    • 写sql语句

    • 调用execute()方法执行sql

    • 抓取数据

    • 提交事物

    • 关闭连接

      # -*- coding: utf-8 -*-
      import psycopg2
      # 获得连接
      conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
      # 获得游标对象
      cursor = conn.cursor()
      # sql语句
      sql = "SELECT VERSION()"
      # 执行语句
      cursor.execute(sql)
      # 获取单条数据.
      data = cursor.fetchone()
      # 打印
      print("database version : %s " % data)
      # 事物提交
      conn.commit()
      # 关闭数据库连接
      conn.close()

      输出结果打印出数据库版本说明连接数据库成功:

        database version : PostgreSQL 11.3, compiled by Visual C++ build 1914, 64-bit


        3、创建表

        创建学生表主要有字段id作为唯一标识,字段 num 代表学号,字段 name 代表学生姓名;

          # -*- coding: utf-8 -*-
          import psycopg2
          # 获得连接
          conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
          # 获得游标对象,一个游标对象可以对数据库进行执行操作
          cursor = conn.cursor()
          # sql语句 建表
          sql = """CREATE TABLE student (
          id serial4 PRIMARY KEY,
          num int4,
          name varchar(25));"""
          # 执行语句
          cursor.execute(sql)
          print("student table created successfully")
          # 事物提交
          conn.commit()
          # 关闭数据库连接
          conn.close()

          4、插入操作

            # -*- coding: utf-8 -*-
            import psycopg2
            # 获得连接
            conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
            # 获得游标对象,一个游标对象可以对数据库进行执行操作
            cursor = conn.cursor()
            # sql语句 建表
            sql ="INSERT INTO student (num, name) \
            VALUES (%s, '%s')" % \
            (100, 'zszxz')
            # 执行语句
            cursor.execute(sql)
            print("successfully")
            # 事物提交
            conn.commit()
            # 关闭数据库连接
            conn.close()


            5、查询操作

            使用fetchone()方法可以抓取一条数据

              # -*- coding: utf-8 -*-
              import psycopg2
              # 获得连接
              conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
              # 获得游标对象,一个游标对象可以对数据库进行执行操作
              cursor = conn.cursor()
              # sql语句 建表
              sql ="""SELECT * FROM student;"""
              # 执行语句
              cursor.execute(sql)
              # 抓取
              row = cursor.fetchone()
              print(row)
              # 事物提交
              conn.commit()
              # 关闭数据库连接
              cursor.close()
              conn.close()

              输出结果:

                (1, 100, 'zszxz')

                使用fetchmany([size=cursor.arraysize])方法可以抓取多条数据;

                  # -*- coding: utf-8 -*-
                  import psycopg2
                  # 获得连接
                  conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
                  # 获得游标对象,一个游标对象可以对数据库进行执行操作
                  cursor = conn.cursor()
                  # sql语句 建表
                  sql ="""SELECT * FROM student;"""
                  # 执行语句
                  cursor.execute(sql)
                  # 抓取
                  #row = cursor.fetchone()
                  rows = cursor.fetchmany(2)
                  print(rows)
                  # 事物提交
                  conn.commit()
                  # 关闭数据库连接
                  cursor.close()
                  conn.close()

                  输出结果:

                    [(1, 100, 'zszxz'), (2, 101, 'zszxz')]

                    使用 fetchall() 方法会抓取所有数据;

                      # -*- coding: utf-8 -*-
                      import psycopg2
                      # 获得连接
                      conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
                      # 获得游标对象,一个游标对象可以对数据库进行执行操作
                      cursor = conn.cursor()
                      # sql语句 建表
                      sql ="""SELECT * FROM student;"""
                      # 执行语句
                      cursor.execute(sql)
                      # 抓取
                      rows = cursor.fetchall()
                      print(rows)
                      # 事物提交
                      conn.commit()
                      # 关闭数据库连接
                      cursor.close()
                      conn.close()

                      输出结果:

                        [(1, 100, 'zszxz'), (2, 101, 'zszxz'), (3, 102, 'zszxz')]

                        条件查询,带参查询读者应该谨记sql与参数分离,参数的末尾必须加上逗号

                          # -*- coding: utf-8 -*-
                          import psycopg2
                          # 获得连接
                          conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
                          # 获得游标对象,一个游标对象可以对数据库进行执行操作
                          cursor = conn.cursor()
                          # sql语句 建表
                          sql ="""SELECT * FROM student where id = %s;"""
                          params = (1,)
                          # 执行语句
                          cursor.execute(sql,params)
                          # 抓取
                          rows = cursor.fetchall()
                          print(rows)
                          # 事物提交
                          conn.commit()
                          # 关闭数据库连接
                          cursor.close()
                          conn.close()

                          输出结果:

                            [(1, 100, 'zszxz')]

                            6、 更新操作

                            更新操作跟之前的查询,插入类似,参数对应的文章分清楚即可。

                              # -*- coding: utf-8 -*-
                              import psycopg2
                              # 获得连接
                              conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
                              # 获得游标对象,一个游标对象可以对数据库进行执行操作
                              cursor = conn.cursor()
                              # sql语句 建表
                              sql ="""update student set name = %s where id = %s """
                              params = ('知识追寻者',3,)
                              # 执行语句
                              cursor.execute(sql,params)
                              # 事物提交
                              conn.commit()
                              # 关闭数据库连接
                              cursor.close()
                              conn.close()

                              7、删除操作

                              删除操作很简单,看如下代码,与之前的代码流程没什么区别;

                                # -*- coding: utf-8 -*-
                                import psycopg2
                                # 获得连接
                                conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
                                # 获得游标对象,一个游标对象可以对数据库进行执行操作
                                cursor = conn.cursor()
                                # sql语句 建表
                                sql ="""delete from student where id = %s """
                                params = (3,)
                                # 执行语句
                                cursor.execute(sql,params)
                                # 事物提交
                                conn.commit()
                                # 关闭数据库连接
                                cursor.close()
                                conn.close()

                                8、异常处理

                                使用psycopg2的 Error 进行异常捕获,能捕获到sql执行时期的所有异常;下面代码中表test是库中不存的表,执行sql后会报异常,经过异常捕获后非常美观,不影响程序运行;


                                  # -*- coding: utf-8 -*-
                                  import psycopg2
                                  # 获得连接
                                  conn = psycopg2.connect(database="python", user="postgres", password="123456", host="127.0.0.1", port="5432")
                                  # 获得游标对象,一个游标对象可以对数据库进行执行操作
                                  cursor = conn.cursor()
                                  # sql语句 建表
                                  sql ="""select * from test"""
                                  params = (3,)
                                  try:
                                  # 执行语句
                                  cursor.execute(sql,params)
                                  except psycopg2.Error as e:
                                  print(e)
                                  # 事物提交
                                  conn.commit()
                                  # 关闭数据库连接
                                  cursor.close()
                                  conn.close()

                                  执行结果

                                    错误:  关系 "test" 不存在
                                    LINE 1: select * from test




                                    文章转载自算法工程师的学习日志,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论