【问题标题】:Creating new column for unique code for each row on column basis using python使用python为每行的唯一代码创建新列
【发布时间】:2019-08-03 11:49:35
【问题描述】:

我试图创建一个查询循环,它执行从一个实例到下一个实例的交互步骤。获取正确数据后。

将 python 连接到 SQL 服务器并返回表架构列名并输入变量。

这里我尝试为数据库中的每条记录创建hashbyte,并将列名保存为hk

我收到错误:

ProgrammingError: ('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name ''COL_NAMES''. (207) (SQLExecDirectW)")

我想要的输出将是列名,因为 hk 应该保存在数据库中,并且所有行都有一个唯一代码

【问题讨论】:

    标签: python sql-server python-3.x pyodbc


    【解决方案1】:

    所以你已经有了列名列表...

    >>> COL_NAMES = ['ID', 'NAME', 'Date']  # sample data
    

    ...您可以将它们插入到带有列表理解的lower(isnull(... 片段中,然后用加号将它们连接在一起...

    >>> s = '+'.join([f"lower(isnull(convert(nvarchar(255),[{x}]), ''))" for x in COL_NAMES])
    >>> s
    "lower(isnull(convert(nvarchar(255),[ID]), ''))+lower(isnull(convert(nvarchar(255),[NAME]), ''))+lower(isnull(convert(nvarchar(255),[Date]), ''))"
    

    ...然后将其插入到 SQL 语句的其余部分中

    >>> sql = f"SELECT HASHBYTES('MD5', {s}) as hk, * INTO [dbo].[ABCD_A] FROM [dbo].[ABC_A]"
    >>> sql
    "SELECT HASHBYTES('MD5', lower(isnull(convert(nvarchar(255),[ID]), ''))+lower(isnull(convert(nvarchar(255),[NAME]), ''))+lower(isnull(convert(nvarchar(255),[Date]), ''))) as hk, * INTO [dbo].[ABCD_A] FROM [dbo].[ABC_A]"
    

    【讨论】:

    猜你喜欢
    • 2015-01-14
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多