[개발이야기#031] 내가 해보고 싶은 것 - 자동 보팅 프로그램 사용자 등록 프로그램 작성하기 [postingcuration]
안녕하세요 가야태자 @talkit 입니다.
이전글
[개발이야기#028] 내가 해보고 싶은 것 - 자동 보팅 프로그램 SQLite vs DuckDB [postingcuration]
[개발이야기#029] 내가 해보고 싶은 것 - 자동 보팅 프로그램 사용자 및 포스트 테이블 생성하기 [postingcuration]
오늘은 어제 글에 이어서 users 테이블에 사용자를 등록 수정 삭제 하는 프로그램을 만들어 보겠습니다.
웹이 아니고 도스용 프로그램이어서 웹용으로도 만들 예정입니다.
생각하고 있는 코드
CLI라고 합니다. Command Line Interface의 약어 이구요.
명령어 줄 인터페이스 한글로 하면 ^^ 이정도 될꺼고,
보통은 그냥 도스 프로그램이라고 생각하시면 됩니다.
사용자아이디와 닉네임을 넣으면 수정일시나 등록일시는 자동으로 등록 되는 시스템입니다.
그리고, 삭제기능은 삭제가 아니고, 사용유부 컬럼을 N로 업데이트 칩니다.
실제 작성된 코드
import duckdb
from datetime import datetime
# DuckDB에 연결 (파일 기반 데이터베이스)
conn = duckdb.connect('steemit_auto_posting.db')
# 사용자 추가 함수
def add_user(user_id, nickname):
registered_at = datetime.now()
modified_at = registered_at
conn.execute("""
INSERT INTO users (user_id, nickname, is_active, registered_at, modified_at)
VALUES (?, ?, 'Y', ?, ?)
ON CONFLICT(user_id) DO UPDATE SET
is_active = 'Y', nickname = ?, modified_at = ?
""", (user_id, nickname, registered_at, modified_at, nickname, modified_at))
print(f"User '{user_id}' added or reactivated.")
# 사용자 정보 수정 함수
def update_user(user_id, nickname=None):
modified_at = datetime.now()
if nickname:
conn.execute("""
UPDATE users
SET nickname = ?, modified_at = ?
WHERE user_id = ?
""", (nickname, modified_at, user_id))
print(f"User '{user_id}' updated with new nickname '{nickname}'.")
else:
print("No changes provided for update.")
# 사용자 삭제 (사용유무 변경) 함수
def deactivate_user(user_id):
modified_at = datetime.now()
conn.execute("""
UPDATE users
SET is_active = 'N', modified_at = ?
WHERE user_id = ?
""", (modified_at, user_id))
print(f"User '{user_id}' deactivated.")
# 사용자 목록 출력 함수
def list_users():
df_users = conn.execute("SELECT * FROM users").df()
print("Current users:")
print(df_users)
def main():
while True:
print("\nUser Management Menu:")
print("1. Add user")
print("2. Update user")
print("3. Deactivate user")
print("4. List users")
print("5. Exit")
choice = input("Choose an option (1/2/3/4/5): ").strip()
if choice == '1':
user_id = input("Enter user_id: ").strip()
nickname = input("Enter nickname: ").strip()
add_user(user_id, nickname)
elif choice == '2':
user_id = input("Enter user_id to update: ").strip()
nickname = input("Enter new nickname (leave blank to skip): ").strip()
update_user(user_id, nickname)
elif choice == '3':
user_id = input("Enter user_id to deactivate: ").strip()
deactivate_user(user_id)
elif choice == '4':
list_users()
elif choice == '5':
print("Exiting the program.")
break
else:
print("Invalid option, please choose 1, 2, 3, 4, or 5.")
if __name__ == "__main__":
main()
코드 설명
add_user
함수:- 사용자 정보를
users
테이블에 추가합니다. - 이미 존재하는
user_id
인 경우에는is_active
를'Y'
로 업데이트하여 사용자 정보를 재활성화하며,nickname
과modified_at
도 업데이트됩니다.
- 사용자 정보를
update_user
함수:- 사용자 정보를 수정합니다.
nickname
이 제공된 경우nickname
을 업데이트하며modified_at
을 현재 시간으로 갱신합니다.
deactivate_user
함수:- 사용자의
is_active
컬럼을'N'
으로 업데이트하여 비활성화합니다. - 실제로 데이터베이스에서 삭제하지 않고 수정 시간을
modified_at
에 기록합니다.
- 사용자의
list_users
함수:users
테이블의 모든 사용자를 출력합니다.
메인 프로그램 루프 (
main
함수):- 사용자의 입력을 받아 사용자 추가, 수정, 비활성화(삭제), 목록 출력, 프로그램 종료 기능을 선택할 수 있습니다.
코드 실행
이제 코드를 실행 해보겠습니다.
코드 저장
위에서 제공해 드린 코드를 user_management.py 로 저장 합니다.
패키지 설치
패키지가 필요 없을 줄 알았는데 열심히 따라하고 계신 @yoghurty 님 덕분에 ^^ 글을 수정 합니다.
pip install numpy pandas
코드 실행
python user_management.py
위와 같이 실행 하면 됩니다.
코드 실행 결과
User Management Menu:
1. Add user
2. Update user
3. Deactivate user
4. List users
5. Exit
Choose an option (1/2/3/4/5):
명령어 선택 창이네요 ^^
저기서 추가를 하나 해보겠습니다.
Enter user_id: talkit
Enter nickname: 가야태자
User 'talkit' added or reactivated.
위와 같이 나옵니다.
이제 실제로 사용자가 있는지 확인 하기 위해서 4를 선택해보겠습니다.
Choose an option (1/2/3/4/5): 4
Current users:
user_id nickname is_active registered_at modified_at
0 talkit 가야태자 Y 2024-10-06 11:43:41.206771 2024-10-06 11:43:41.206771
위와 같이 제 아이디가 잘 등록 되었습니다.
다음 글에서는 등록된 아이디의 최근 글을 100개 이내로 수집하는 프로그램을 작성해 보겠습니다. ^^
감사합니다.
Posted through the ECblog app (https://blog.etain.club)
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
👍
Virtual Box 우분투에서 conda 환경 생성 후
알려주신 소스코드를 이용하여 사용자 등록 프로그램을 작성하였습니다.
에러가 났는데,
를 해주었더니 해결되었습니다! ^^
고맙습니다~!
오 감사합니다. install 할 패키지 수정 하겠습니다.