I know this question has been asked many times on the web resulting in many different solutions none which have worked for me.
For my scenario I'm attempting to do a simple connection to a MS Sql database connecting just with Service account username and password using windows authentication isn't an option for my task.
This is the connection string that I am providing:
databaseConnection = 'DRIVER={SQL Server}; SERVER=ServerName; Database=DatbaseName; UID=UserId; PWD=password;'
This is the error I receive when trying to run the script:
dbConnection = pyodbc.connect(DATABASE.databaseConnection)
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC SQL Server Driver]
[SQL Server]Cannot open database "XXXX" requested by the login. The login failed.
(4060) (SQLDriverConnect); [42000] [Microsoft][ODBC SQL Server Driver]
[SQL Server]Cannot open database "XXXX" requested by the login. The login failed. (4060)')
Is there anything incorrect about this connection string? I have double checked the username and password by copy and pasting it into SQL Server Management Studio and logging into the database from there and it is successful.
I had this problem myself and I fixed it by going to the Microsoft SQL Server management studio and manually connecting the database to the user account you login into the database with.
To do this:
While you are at it, look at the panel at the bottom. Where it says Database role membership for:{database name}
, make sure you have db_datareader
and db_datawriter
checked.
Here is a way to have a connection string using sqlalchemy (see https://www.sqlalchemy.org/ ):
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from db import Db
#Get localhost DB
engine = create_engine('mssql+pyodbc://myDbUser:myDbPassword@localhost:1433/MyDatabase?driver=SQL+Server+Native+Client+11.0?trusted_connection=no')
DBSession = sessionmaker(bind=engine)
session = DBSession()
db = Db(session)
print "the widget number is: "+db.widgetNumber
I faced the same issue and the problem was the database name.
I was putting the database name between brackets, like [DB_NAME], however as soon as I removed the brackets to DB_NAME it worked fine.
Please give it a try.
Configure the MSSQL server in the obdc datasources and give the name with the pyodbc connection as below.My userdsn name is MyConnection
import pyodbc
cnxn = pyodbc.connect('DSN=MyConnection')
cursor = cnxn.cursor()
cursor.execute("SELECT TOP (1000) [DepartmentID] ,[Name] ,[GroupName] ,[ModifiedDate] FROM ["
"AdventureWorks2019].[HumanResources].[Department]")
rows = cursor.fetchall()
for row in rows:
print(row.DepartmentID, row.Name)
It is working for me. Let me know if there are any other ways to do this.
The important parameter is where the “username and password” were set, I am replacing it with “Trusted_Connection=yes” so the user account logged into Windows is used instead.
import pyodbc
conn_str = ("Driver={SQL Server};"
"Server=<server-name>;"
"Database=<db-name>;"
"Trusted_Connection=yes")
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.