我有一个函数,可以将SQL服务器中的表中的表拉入Python中的数据框,但是它会强制所有列标题都小写。代码如下:
connection = pypyodbc.connect('Driver={SQL Server};'
'Server=' + server + ';'
'Database=' + database + ';'
'uid=' + username + ';'
'pwd=' + password + ';')
query = 'SELECT * FROM ' + tableName
#set dict value to dataframe imported from SQL
tableDict[tableName] = pd.read_sql(query, connection)
Run Code Online (Sandbox Code Playgroud)
SQL中的标头例如:pmiManufacturingHeadline_Level它在我的熊猫数据框中显示为:pmimanufacturingheadline_level
任何人都有一个想法如何使pandas.read_sql保持原始大小写?
我认为PyPyODBC为您做到了:
这是我在PyPyODBCver 的源代码中找到的。1.3.3行:28-29:
version = '1.3.3'
lowercase=True
Run Code Online (Sandbox Code Playgroud)
和1771-1772行:
if lowercase:
col_name = col_name.lower()
Run Code Online (Sandbox Code Playgroud)
因此,您可以根据需要更改行为:
import pypyodbc
pypyodbc.lowercase = False # force the ODBC driver to use case-sensitive column names
Run Code Online (Sandbox Code Playgroud)
我知道这个问题使用 SQL Server 和 PyODBC,但对于通过 Google 来到这里并使用 PostgreSQL / psycopg2 的每个人来说:PostgreSQL 自动将不带引号的列名称转换为小写,所以如果您有这样的查询
SELECT foo AS MY_FOO FROM some_table
Run Code Online (Sandbox Code Playgroud)
my_foo然后你会从得到一列pd.read_sql。
要恢复预期的拼写,请引用列别名,如下所示:
SELECT foo AS "MY_FOO" FROM some_table
Run Code Online (Sandbox Code Playgroud)
但请注意,这仅对别名有效。对于实际的列名称,您必须使用创建列时使用的拼写,该拼写可能是小写的(有意或通过自动转换)。
有关详细信息,请参阅此问题。