【问题标题】:Rows are not getting inserted to mysql using python没有使用python将行插入mysql
【发布时间】: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


【解决方案1】:

msql_ins 缺少分号(不确定是否需要)。更重要的是,您缺少一个元组;而不是:

cur_msql.execute(msql_ins, row[0],row[1])

试试这个:

cur_msql.execute(msql_ins, (row[0], row[1]))

希望有帮助:)

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2018-03-02
    • 2011-05-14
    • 2018-02-06
    • 2017-06-13
    • 2019-08-06
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多