【发布时间】:2019-10-23 13:20:26
【问题描述】:
我想从 PostgreSQL 向 mySQL 数据库插入一些记录(两者都是远程服务器),所以我使用下面的脚本,但情况是数据没有插入 MySQL 数据库。
有一个最终计数语句总是结果为零。请问我知道可能是什么原因吗?
还需要对此代码进行任何改进。
请提出建议。
import psycopg2
import os
import time
#import MySQLdb
from mysql.connector import (connection)
import sys
#from pprint import pprint
#from datetime import datetime
#from psycopg2 import sql
#from utils.config import Configuration as Config
#from utils.postgres_helper import get_connection
#from utils.utils import get_global_config
def db_connect():
# MySQLdb connection
try:
source_host = 'magento'
#conf = get_global_config()
#cnx_msql = MySQLdb.connect(host=conf.get(source_host, 'host'),
#user=conf.get(source_host, 'user'),
#passwd=conf.get(source_host, 'password'),
#port=int(conf.get(source_host, 'port')),
#db=conf.get(source_host, 'db'))
cnx_msql = connection.MySQLConnection(host='server.com', user='db13009',passwd='fgDT***********',port=3306,db='db13009')
print('MySQL DB connected')
except mysql.connector.Error as e:
print ("MYSQL: Unable to connect!", e.msg)
sys.exit(1)
# Postgresql connection
try:
#cnx_psql = get_connection(get_global_config(), 'pg_dwh')
cnx_psql =psycopg2.connect(host='xxx.xxx.xx.xx',
dbname='postgres',
port='5432',
user='postgres',
password='*********')
print('PSQL DB connected')
except psycopg2.Error as e:
print('PSQL: Unable to connect!\n{0}').format(e)
sys.exit(1)
# Cursors initializations
cur_msql = cnx_msql.cursor()
cur_psql = cnx_psql.cursor()
SQL_test="""SELECT count(*) from action_status;"""
cur_msql.execute(SQL_test)
records = cur_msql.fetchall()
for row in records:
print("count = ", row[0], )
msql_command=""
try:
SQL_load="""SELECT created_at,payload from staging.sync;"""
msql_ins="""INSERT INTO action_status(payload,created_at)VALUES (%s, %s) """
cur_psql.execute(SQL_load)
for row in cur_psql:
try:
print(row[0])
print(row[1])
cur_msql.execute(msql_ins, row[0],row[1])
except psycopg2.Error as e:
print('ffffffffffffff')
print ("Cannot execute the query!!", e.pgerror)
sys.exit(1)
cnx_msql.commit()
cur_msql.execute(SQL_test)
records = cur_msql.fetchall()
for row in records:
print("count = ", row[0], )
except (Exception, psycopg2.Error) as error:
print ("Error while fetching data from PostgreSQL", error)
finally:
## Closing cursors
cur_msql.close()
cur_psql.close()
## Committing
cnx_psql.commit()
## Closing database connections
cnx_msql.close()
cnx_psql.close()
if __name__ == '__main__':
db_connect()
【问题讨论】:
-
您是从 postgresql 获取数据吗?请先检查它...然后在 mysql 中插入每条记录时,确保您正在提交光标。
-
@AkashPagar 是的,我正在从 postgreSQL 获取数据,但它没有插入 MySQL,我在 for 循环之后提交了它。没问题吧?
-
@AkashPagar您是否发现任何错误或可以改进的地方?
-
您是否查看了 mysql 日志以查看您的查询发送到 mysql 服务器的内容?
-
@nbk 我无法访问该服务器。但也许我可以请人检查一下。您是否发现任何其他错误?
标签: python mysql postgresql