使用SQLAlchemy更新加密列

时间:2018-02-27 03:31:24

标签: python sql-server sqlalchemy

我尝试使用SQLAlchemy更新SQL Server 2016数据库中的加密列。在SSMS中运行时,查询将按预期更新列,但在使用以下python代码运行时会导致NULL。它只是加密列的一个问题,因为我可以通过SQLAlchemy更新同一个表中的其他列。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session

engine = create_engine('mssql+pyodbc://{}:{}@{}:{}/{}?driver=ODBC+Driver+13+for+SQL+Server'.format('User', 'UserPassword', 'server', port, 'db_name'))
Session = scoped_session(sessionmaker(bind=engine))
s = Session()
s.execute("USE [db_name] OPEN Symmetric KEY S_Key DECRYPTION BY CERTIFICATE S_Cert WITH PASSWORD = 'secret' UPDATE [db_name].[dbo].[Table1] SET [Encryption] = ENCRYPTBYKEY(KEY_GUID('S_Key'), 'newpassword') WHERE [ID] = 10")
s.commit()

注意:我使用原始SQL,因为我不知道通过SQLAlchemy将数据插入加密列的其他方法。很高兴看到其他方法。

1 个答案:

答案 0 :(得分:0)

排序。更改了execute函数以将查询作为存储过程调用,产生的错误让我知道用户没有正确访问密钥和证书。