Here is my code. I am trying to run my stored procedure that updates my tables:
<code>import pyodbc
import logging
import json
import pandas as pd
import sqlalchemy as sa
import warnings
import time
def to_varbinary(val):
return bytes(val, 'utf-8')
def pop_abc_insert():
logger = logging.getLogger()
logger.setLevel(logging.INFO)
start_time = time.time()
with open(r'upsert_config.json','r') as ts:
config = json.load(ts)
ABC_driver = config['ABC_layer']['ABC_driver']
ABC_server = config['ABC_layer']['ABC_server']
ABC_database = config['ABC_layer']['ABC_database']
POP_driver = config['POP_layer']['POP_driver']
POP_server = config ['POP_layer']['POP_server']
POP_database = config['POP_layer']['POP_database']
conn = pyodbc.connect(
f'Driver={ABC_driver};'
f'Server={ABC_server};'
f'Database={ABC_database};'
f'Driver={POP_driver};'
f'Server={POP_server};'
f'Database={POP_database};'
f'Trusted_Connection=yes;'
f'MARS_Connection=Yes'
)
try:
ABC_database=f'{ABC_database}.dbo'
cursor = conn.cursor()
read_table_query="""
SELECT table_name
FROM information_schema.tables
WHERE table_name = 'TABLE_NAME_HERE'
ORDER BY table_name asc
"""
cursor.execute(read_table_query)
print(read_table_query)
logger.info("Successfully connected to database")
except Exception as e:
logger.error("Unable to connect to database: %s", str(e))
for tables in cursor.fetchall():
tab = tables[0]
ABC_POP_query = f"""
update {POP_database}.dbo.{tab} SET
Active_ind = 0,
expiry_date = GETDATE(),
updated_date = GETDATE()
WHERE convert( varbinary,hash_key )IN (
SELECT convert( varbinary,T1.hash_key)
FROM {ABC_database}.dbo.{tab} T1 LEFT JOIN
{POP_database}.dbo.{tab} T2 ON convert( varbinary,T1.hash_key) = convert( varbinary,T2.hash_key)
WHERE convert( varbinary,T1.hash_dif) <> convert( varbinary,T2.hash_dif)
AND T1.Active_ind = 1
) AND Active_ind = 1
insert into {POP_database}.dbo.{tab}
select * from {ABC_database}.dbo.{tab}
WHERE convert(varbinary,hash_key) IN (
SELECT convert(varbinary,T1.hash_key)
FROM {ABC_database}.dbo.{tab} T1 LEFT JOIN
{POP_database}.dbo.{tab} T2 ON convert( varbinary,T1.hash_key) = convert( varbinary,T2.hash_key)
WHERE convert( varbinary,T1.hash_dif) <> convert( varbinary,T2.hash_dif)
AND T1.Active_ind = 1)
insert into {POP_database}.dbo.{tab}
select * from {ABC_database}.dbo.{tab}
WHERE convert(varbinary, hash_key) NOT IN (
SELECT convert(varbinary,T2.hash_key)
FROM {POP_database}.dbo.{tab} T2
WHERE T2.Active_ind = 1)
"""
cursor.execute(ABC_POP_query)
pop_abc_insert()
</code>
<code>import pyodbc
import logging
import json
import pandas as pd
import sqlalchemy as sa
import warnings
import time
def to_varbinary(val):
return bytes(val, 'utf-8')
def pop_abc_insert():
logger = logging.getLogger()
logger.setLevel(logging.INFO)
start_time = time.time()
with open(r'upsert_config.json','r') as ts:
config = json.load(ts)
ABC_driver = config['ABC_layer']['ABC_driver']
ABC_server = config['ABC_layer']['ABC_server']
ABC_database = config['ABC_layer']['ABC_database']
POP_driver = config['POP_layer']['POP_driver']
POP_server = config ['POP_layer']['POP_server']
POP_database = config['POP_layer']['POP_database']
conn = pyodbc.connect(
f'Driver={ABC_driver};'
f'Server={ABC_server};'
f'Database={ABC_database};'
f'Driver={POP_driver};'
f'Server={POP_server};'
f'Database={POP_database};'
f'Trusted_Connection=yes;'
f'MARS_Connection=Yes'
)
try:
ABC_database=f'{ABC_database}.dbo'
cursor = conn.cursor()
read_table_query="""
SELECT table_name
FROM information_schema.tables
WHERE table_name = 'TABLE_NAME_HERE'
ORDER BY table_name asc
"""
cursor.execute(read_table_query)
print(read_table_query)
logger.info("Successfully connected to database")
except Exception as e:
logger.error("Unable to connect to database: %s", str(e))
for tables in cursor.fetchall():
tab = tables[0]
ABC_POP_query = f"""
update {POP_database}.dbo.{tab} SET
Active_ind = 0,
expiry_date = GETDATE(),
updated_date = GETDATE()
WHERE convert( varbinary,hash_key )IN (
SELECT convert( varbinary,T1.hash_key)
FROM {ABC_database}.dbo.{tab} T1 LEFT JOIN
{POP_database}.dbo.{tab} T2 ON convert( varbinary,T1.hash_key) = convert( varbinary,T2.hash_key)
WHERE convert( varbinary,T1.hash_dif) <> convert( varbinary,T2.hash_dif)
AND T1.Active_ind = 1
) AND Active_ind = 1
insert into {POP_database}.dbo.{tab}
select * from {ABC_database}.dbo.{tab}
WHERE convert(varbinary,hash_key) IN (
SELECT convert(varbinary,T1.hash_key)
FROM {ABC_database}.dbo.{tab} T1 LEFT JOIN
{POP_database}.dbo.{tab} T2 ON convert( varbinary,T1.hash_key) = convert( varbinary,T2.hash_key)
WHERE convert( varbinary,T1.hash_dif) <> convert( varbinary,T2.hash_dif)
AND T1.Active_ind = 1)
insert into {POP_database}.dbo.{tab}
select * from {ABC_database}.dbo.{tab}
WHERE convert(varbinary, hash_key) NOT IN (
SELECT convert(varbinary,T2.hash_key)
FROM {POP_database}.dbo.{tab} T2
WHERE T2.Active_ind = 1)
"""
cursor.execute(ABC_POP_query)
pop_abc_insert()
</code>
import pyodbc
import logging
import json
import pandas as pd
import sqlalchemy as sa
import warnings
import time
def to_varbinary(val):
return bytes(val, 'utf-8')
def pop_abc_insert():
logger = logging.getLogger()
logger.setLevel(logging.INFO)
start_time = time.time()
with open(r'upsert_config.json','r') as ts:
config = json.load(ts)
ABC_driver = config['ABC_layer']['ABC_driver']
ABC_server = config['ABC_layer']['ABC_server']
ABC_database = config['ABC_layer']['ABC_database']
POP_driver = config['POP_layer']['POP_driver']
POP_server = config ['POP_layer']['POP_server']
POP_database = config['POP_layer']['POP_database']
conn = pyodbc.connect(
f'Driver={ABC_driver};'
f'Server={ABC_server};'
f'Database={ABC_database};'
f'Driver={POP_driver};'
f'Server={POP_server};'
f'Database={POP_database};'
f'Trusted_Connection=yes;'
f'MARS_Connection=Yes'
)
try:
ABC_database=f'{ABC_database}.dbo'
cursor = conn.cursor()
read_table_query="""
SELECT table_name
FROM information_schema.tables
WHERE table_name = 'TABLE_NAME_HERE'
ORDER BY table_name asc
"""
cursor.execute(read_table_query)
print(read_table_query)
logger.info("Successfully connected to database")
except Exception as e:
logger.error("Unable to connect to database: %s", str(e))
for tables in cursor.fetchall():
tab = tables[0]
ABC_POP_query = f"""
update {POP_database}.dbo.{tab} SET
Active_ind = 0,
expiry_date = GETDATE(),
updated_date = GETDATE()
WHERE convert( varbinary,hash_key )IN (
SELECT convert( varbinary,T1.hash_key)
FROM {ABC_database}.dbo.{tab} T1 LEFT JOIN
{POP_database}.dbo.{tab} T2 ON convert( varbinary,T1.hash_key) = convert( varbinary,T2.hash_key)
WHERE convert( varbinary,T1.hash_dif) <> convert( varbinary,T2.hash_dif)
AND T1.Active_ind = 1
) AND Active_ind = 1
insert into {POP_database}.dbo.{tab}
select * from {ABC_database}.dbo.{tab}
WHERE convert(varbinary,hash_key) IN (
SELECT convert(varbinary,T1.hash_key)
FROM {ABC_database}.dbo.{tab} T1 LEFT JOIN
{POP_database}.dbo.{tab} T2 ON convert( varbinary,T1.hash_key) = convert( varbinary,T2.hash_key)
WHERE convert( varbinary,T1.hash_dif) <> convert( varbinary,T2.hash_dif)
AND T1.Active_ind = 1)
insert into {POP_database}.dbo.{tab}
select * from {ABC_database}.dbo.{tab}
WHERE convert(varbinary, hash_key) NOT IN (
SELECT convert(varbinary,T2.hash_key)
FROM {POP_database}.dbo.{tab} T2
WHERE T2.Active_ind = 1)
"""
cursor.execute(ABC_POP_query)
pop_abc_insert()
Here is my config in json format:
<code>{
"ABC_layer":
{
"ABC_driver": "ODBC Driver 17 for SQL Server",
"ABC_server": "SERVER1",
"ABC_database": "ABC"
},
"POP_layer":
{
"POP_driver": "ODBC Driver 17 for SQL Server",
"POP_server": "SERVER1",
"POP_database": "POP"
}
}
</code>
<code>{
"ABC_layer":
{
"ABC_driver": "ODBC Driver 17 for SQL Server",
"ABC_server": "SERVER1",
"ABC_database": "ABC"
},
"POP_layer":
{
"POP_driver": "ODBC Driver 17 for SQL Server",
"POP_server": "SERVER1",
"POP_database": "POP"
}
}
</code>
{
"ABC_layer":
{
"ABC_driver": "ODBC Driver 17 for SQL Server",
"ABC_server": "SERVER1",
"ABC_database": "ABC"
},
"POP_layer":
{
"POP_driver": "ODBC Driver 17 for SQL Server",
"POP_server": "SERVER1",
"POP_database": "POP"
}
}
I am getting this error:
<code>pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Could not find server 'ABC' in sys.servers.
Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.se
rvers. (7202) (SQLExecDirectW)")
</code>
<code>pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Could not find server 'ABC' in sys.servers.
Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.se
rvers. (7202) (SQLExecDirectW)")
</code>
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Could not find server 'ABC' in sys.servers.
Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.se
rvers. (7202) (SQLExecDirectW)")
I am trying to update the tables on the same server so I don’t need to link the servers or anything right? The tables are in different databases but both are SQL server. Is there an error in my code?