python 快速写入postgresql数据库方法

一种是导入sqlalchemy包,另一种是导入psycopg2包。
具体用法如下(此处以postgre数据库举例)
第一种:
# 导入包
from sqlalchemy import create_engine
import pandas as pd
from string import Template
engine = create_engine("oracle://user:pwd@***:***/racdb", echo=False)
# 初始化引擎
engine = create_engine('postgresql+psycopg2://' + pg_username + ':' + pg_password + '@' + pg_host + ':' + str(
    pg_port) + '/' + pg_database)
query_sql = """
      select * from $arg1
      """
query_sql = Template(query_sql) # template方法
df = pd.read_sql_query(query_sql .substitute(arg1=tablename),engine) # 配合pandas的方法读取数据库值
# 配合pandas的to_sql方法使用十分方便(dataframe对象直接入库)
df.to_sql(table, engine, if_exists='replace', index=False) #覆盖入库
df.to_sql(table, engine, if_exists='append', index=False)  #增量入库

注意:上述df.to_sql的方法实在是太慢太慢了,千万的数据chunksize设置为万,上传了5个小时 郁闷。查资料后得知以下方法:速度极快!!!!!

def write_to_table(df, table_name, if_exists='fail'):
    import io
    import pandas as pd
    from sqlalchemy import create_engine
    db_engine = create_engine('postgresql://***:***@***:***/***')# 初始化引擎
    string_data_io = io.StringIO()
    df.to_csv(string_data_io, sep='|', index=False)
    pd_sql_engine = pd.io.sql.pandasSQL_builder(db_engine)
    table = pd.io.sql.SQLTable(table_name, pd_sql_engine, frame=df,
                               index=False, if_exists=if_exists,schema = 'goods_code')
    table.create()
    string_data_io.seek(0)
    string_data_io.readline()  # remove header
    with db_engine.connect() as connection:
        with connection.connection.cursor() as cursor:
            copy_cmd = "COPY goods_code.%s FROM STDIN HEADER DELIMITER '|' CSV" %table_name
            cursor.copy_expert(copy_cmd, string_data_io)
        connection.connection.commit()


### 如何通过 Python 连接到 PostgreSQL 数据库 Python 可以通过 `psycopg2` PostgreSQL 数据库建立连接并执行查询操作。以下是详细的说明以及示例代码。 #### 1. 安装 `psycopg2` 为了能够使用 Python 操作 PostgreSQL 数据库,需要先安装 `psycopg2` 模块。可以通过以下命令完成安装: ```bash pip install psycopg2 ``` 如果遇到任何依赖问题或者性能需求较高的场景,也可以考虑安装二进制优化版的 `psycopg2-binary`[^2]: ```bash pip install psycopg2-binary ``` #### 2. 建立数据库连接 在成功安装 `psycopg2` 后,可以利用其功能创建一个到 PostgreSQL 的连接对象。下面是一个基本的例子展示如何实现这一点: ```python import psycopg2 try: connection = psycopg2.connect( user="your_username", password="your_password", host="localhost", port="5432", database="your_database_name" ) cursor = connection.cursor() # 执行 SQL 查询语句 cursor.execute("SELECT version();") db_version = cursor.fetchone() # 获取单条记录 print(f"Connected to {db_version}") except (Exception, psycopg2.Error) as error : print ("Error while connecting to PostgreSQL", error) finally: if(connection): cursor.close() connection.close() print("PostgreSQL connection is closed") ``` 上述脚本展示了如何设置参数来初始化一个连接实例,并尝试读取当前运行中的 PostgreSQL 版本号作为测试。 #### 3. 插入数据至表中 除了简单的查询外,还可以向已存在的表格里写入新纪录。这里给出一段示范性的插入逻辑代码片段: ```python insert_query = """ INSERT INTO mobile(id, model, price) VALUES (%s,%s,%s)""" record_to_insert = ('N', 'iPhone XS Max Pro', 1000) cursor.execute(insert_query, record_to_insert) connection.commit() print(cursor.rowcount,"Record inserted successfully into mobile table") ``` 这段程序定义了一条SQL指令用于新增一条手机型号及其价格的信息,并提交更改给数据库确认保存。 #### 4. 处理事务 当涉及到多步更新或删除动作时,应该特别注意保持一致性原则。这通常意味着要正确运用事务控制机制。例如,在批量导入之前开启一个新的事务;一旦全部加载完毕后再统一提交整个过程的结果。 ```python try: connection.autocommit = False insert_query_1 = "INSERT INTO test_table(col1,col2) VALUES('val1','val2')" delete_query = "DELETE FROM another_test WHERE condition" cursor.execute(insert_query_1) cursor.execute(delete_query) connection.commit() print("Transaction completed") except Exception as e: connection.rollback() print("An exception occurred:",e) finally: if connection: cursor.close() connection.close() ``` 以上例子演示了在一个事务范围内先后执行两条不同的DML(Datamanipulation Language)语句——先是增加某些项紧接着移除另一些符合条件的内容。假如期间发生错误,则回滚所有未决变动以防破坏原始状态的数据完整性。 --- ###
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI仙人掌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值