sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) Не все параметры были использованы в операторе SQL - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь обновить MySQL через dataframe с помощью кортежа, но я застрял, я не знаю, в чем проблема в базе mydata или с моим кодом

, и это весь мой код, который я использую

from sqlalchemy import create_engine
import pandas as pd
import os
import csv
import MySQLdb
from sqlalchemy import types, create_engine


# MySQL Connection
MYSQL_USER      = 'root'
MYSQL_PASSWORD  = 'xxxxxxxxxx'
MYSQL_HOST_IP   = '127.0.0.1'
MYSQL_PORT      = 3306
MYSQL_DATABASE  = 'mydb'

engine = create_engine
('mysql+mysqlconnector://'+MYSQL_USER+':'+MYSQL_PASSWORD+'@'+MYSQ 
L_HOST_IP+':'+str(MYSQL_PORT)+'/'+MYSQL_DATABASE, echo=False)

mydir = (os.getcwd()).replace('\\', '/') + '/'
all_data = pd.read_sql('SELECT * FROM govtracker', engine)
# .drop(['#'], axis=1)
myOutlook_inBox = pd.read_csv(r'' + mydir + 'test.CSV', usecols=['Subject', 
'Body', 'From: (Name)', 'To: (Name)'],
                          encoding='latin-1')
myOutlook_inBox.columns = myOutlook_inBox.columns.str.replace(' ', '')

#this object extract 5 chars and 5 numbers from specific column in csv
replaced_sbj_value = myOutlook_inBox['Subject']
.str.extract(pat='(L(?:DEL|CAI|SIN).\d{5})').dropna()

#this columns I want to filter in database
myOutlook_inBox["Subject"] = replaced_sbj_value
# this conditions filters and get and dublicate repeated data from outlook 
exported file
# Condition 1: any mail from mowafy to te
frm_mwfy_to_te = myOutlook_inBox.loc[myOutlook_inBox['From: 
(Name)'].str.contains("mowafy", na=False)
                                 & myOutlook_inBox['To: 
(Name)'].str.contains("te", na=False)].drop_duplicates(
keep=False)


#Condition 2: any mail from pp to mowafy
frm_pp_to_mwfy = \
myOutlook_inBox.loc[myOutlook_inBox['From:(Name)'].str.contains("Amr Mohamed 
Abuella barakat", na=False)] \
| myOutlook_inBox.loc[myOutlook_inBox['From:(Name)'].str.contains("Reham", 
na=False)] \
| myOutlook_inBox.loc[myOutlook_inBox['From:(Name)'].str.contains("Hany", 
na=False)] \
| myOutlook_inBox.loc[myOutlook_inBox['From:(Name)'].str.contains("Ossama 
Monir", na=False)] \
& myOutlook_inBox.loc[myOutlook_inBox['To:(Name)'].str.contains("mowafy", 
na=False)].drop_duplicates(keep=False)

#Condition 3: any mail from TE to mowafy
frm_te_to_mwfy = \
myOutlook_inBox.loc[myOutlook_inBox['From:(Name)'].str.contains("te", 
na=False)] & \
myOutlook_inBox.loc[myOutlook_inBox['To:(Name)'].str.contains("mowafy", 
na=False)].drop_duplicates(keep=False)

frm_mwfy_to_te.Subject

filtered_data = all_data
.loc[all_data.site_code.str.contains('|'.join(frm_mwfy_to_te.Subject))]


print(myOutlook_inBox)

all_data.replace('\n', '', regex=True)
df = all_data.where((pd.notnull(all_data)), None)
print(df)

print("Success")

print(frm_mwfy_to_te.Subject)
print(filtered_data.site_code)

values = tuple(filtered_data[['site_code']].values)

query = """
UPDATE govtracker
SET pending = 'TE'  
WHERE site_code in %s)
"""
connection = engine.connect()
update_db_query = connection.execute(query, values)

и это мой traceback

Traceback (most recent call last):
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\base.py", line 1244, in _execute_context
cursor, statement, parameters, context
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\default.py", line 550, in do_execute
cursor.execute(statement, parameters)
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\mysql\connector\cursor.py", line 543, in execute
"Not all parameters were used in the SQL statement")
mysql.connector.errors.ProgrammingError: Not all parameters were used in 
the SQL statement

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:/Users/DELL/PycharmProjects/MyALLRefProf/MyAutomationFuncs.py", 
line 92, in <module>
update_db_query = connection.execute(query, values)
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\base.py", line 982, in execute
return self._execute_text(object_, multiparams, params)
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\base.py", line 1155, in _execute_text
parameters,
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\base.py", line 1248, in _execute_context
e, statement, parameters, cursor, context
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\base.py", line 1466, in _handle_dbapi_exception
util.raise_from_cause(sqlalchemy_exception, exc_info)
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\util\compat.py", line 383, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\util\compat.py", line 128, in reraise
raise value.with_traceback(tb)
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\base.py", line 1244, in _execute_context
cursor, statement, parameters, context
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\sqlalchemy\engine\default.py", line 550, in do_execute
cursor.execute(statement, parameters)
File "C:\Users\DELL\PycharmProjects\MyALLRefProf\venv\lib\site- 
packages\mysql\connector\cursor.py", line 543, in execute
"Not all parameters were used in the SQL statement")
sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 
Not all parameters were used in the SQL statement
[SQL: 
UPDATE govtracker
SET pending = 'TE'  
WHERE site_code in %s)
]
[parameters: ('LCAIE30089', 'LSINI16321')]
(Background on this error at: http://sqlalche.me/e/f405)

Теперь я кратко объясню свой код и ситуацию

Итак, после того как я создал соединение и прочитал с пандами, я началсоздайте условие, которое фильтрует это условие, и извлекли какое-то значение из кадра данных pandas, поскольку в результате столбец данных содержит несколько значений, поэтому теперь я использовал этот вывод для фильтрации в своей базе данных с помощью Join, поэтому теперь я хочу обновить столбцы come в зависимости отзначение, которое я отфильтровал с помощью кортежей, и создал простой запрос, но я застрял и обнаружил эту ошибку. Поэтому, если кто-нибудь сможет помочь мне решить этот случай, я буду ему благодарен

надеюсь, что вседостаточно ясно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...