Pythonでpandasを使用して.csvファイルからユーザーの詳細(ユーザー名、電子メール、パスワード)をpostgres DBにアップロードしています。データフレームが生成されるまでは大丈夫ですが、ユーザの詳細をアップロードするためのコードを実行すると、emai-idからの "@ gmail.com"という部分文字列がpostgres DBの小文字に変換/格納されます。 これは私がDjangoアプリケーションのPythonシェルで書かれたコードである - に示すようPythonでpandasを使用してexcelファイルからユーザーの詳細をアップロードするPostgresにデータベース
>>>import sys
>>>from django.contrib.auth import authenticate
>>>from django.contrib.auth import get_user_model
>>>import pandas as pd
>>>User = get_user_model()
>>>df=pd.read_excel('set_A_results_748_web.xlsx',sheetname='Sheet1',parse_cols=(0,3,4))
df.head()
Dataframe First 10 rows Output Screenshot
>>>users = [tuple(x) for x in df.values]
>>>for name, email, password in users:
try:
print ('Creating user {0}.'.format(name))
user = User.objects.create_user(name=name, email=email)
user.set_password(password)
user.save()
assert authenticate(name=name, password=password)
print ('User {0} successfully created.'.format(name))
except:
print ('There was a problem creating the user: {0}. Error: {1}.' \
.format(name, sys.exc_info()[1]))
Postgres User Table Data Screenshot After Uploading
出力(最初の10行のデータフレームdf)すべてのユーザーの電子メールIDはExcelファイルのデータに添付されますが、auth_userにアップロードすると私のpostgres DBのテーブルは、電子メールの後半部分が小文字に変換されます。
例:行6(Dipak Shah)の電子メールアドレスは[email protected]
として保存されますが、つまり[email protected]
として保存されます。これは、他の詳細と一緒にユーザのスコアが別のスコアテーブルに格納されていて、ケトル変換を介して別にアップロードするので、アプリケーションで問題を引き起こします。したがって、大文字小文字の不一致のため電子メールの不一致があるレコードの場合は、スコア表にデータはありません。
私が間違っているかもしれない、または私がthis.Anyを避けるために何ができるかについてのアイデアは、非常に高く評価されるでしょう!
ありがとうございました!ケトル変換を通じてスコアデータをDBにアップロードする前に、すべての電子メールIDを小文字に変換しました。また、django.contrib.auth.base_userのBaseUserManagerクラスを拡張する独自のPythonクラスを定義することで、(ドメイン部分ではなく)ユーザーの電子メールID全体を正規化しました。両方のテーブルの電子メールは小文字で格納されます。 –