파이썬: mysqldb를 사용하여 MySQL 테이블을 사전으로 가져오시겠습니까?
mysqldb를 사용하여 행이 많은 MySQL 테이블을 파이썬의 사전 객체 목록으로 변환하는 방법을 아는 사람?
즉, 열이 'a', 'b', 'c'인 MySQL 행 집합을 다음과 같은 Python 객체로 변환하는 것입니다.
data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 }, { 'a':'Q', 'b':(1, 4), 'c':5.0 }, { 'a':'T', 'b':(2, 8), 'c':6.1 } ]
감사합니다 :)
MySQLDB에는 DictCursor라는 별도의 커서 클래스가 있습니다.사용할 커서 클래스를 MySQLdb.connect()에 전달할 수 있습니다.
import MySQLdb.cursors
MySQLdb.connect(host='...', cursorclass=MySQLdb.cursors.DictCursor)
커서를 더 많이 사용해야 하고 하나만 MySQLdb.cursors여야 하는 경우.DictCursor에서 수행할 수 있는 작업:
import MySQLdb
db = MySQLdb.connect(host='...', db='...', user='...t', passwd='...')
list_cursor = db.cursor()
dict_cursor = db.cursor(MySQLdb.cursors.DictCursor)
mysql.connector를 사용하면 MySQLDB보다 선택 항목을 딕트로 변환하는 것이 훨씬 더 쉽고, 더 많은 파이썬 버전이 지원됩니다.
cursor = conn.cursor(dictionary=True)
자세한 예:
import mysql.connector # pip install mysql-connector-python
conn = mysql.connector.connect(host="localhost", user="user", passwd="pass", database="dbname")
cursor = conn.cursor(dictionary=True)
sql = "SELECT * FROM `table` WHERE 1"
cursor.execute(sql)
rows = cursor.fetchall()
for row in rows:
row["col"]
이것은 오래된 게시물이고, 이 대답이 OP가 정확히 찾던 것은 아니지만, 그것은 거의 같은 맥락입니다.사전 목록을 생성하는 대신 목록 사전을 생성합니다.
또한 사전을 생성하기 위한 전체 코드를 제공할 것으로 생각했습니다.
import MySQLdb
import MySQLdb.cursors
dict_serv = MySQLdb.connect(host = 'localhost', user = 'root', passwd = 'mypassword', cursorclass = MySQLdb.cursors.DictCursor)
with dict_serv as c:
c.execute("USE mydb")
c.execute("SELECT col1, col2 FROM mytable WHERE id = 'X123'")
# Save the dictionary to a separate variable
init_dict = c.fetchall()
# This line builds the column headers
sql_cols = [ col[0] for col in c.description ]
# This is a list comprehension within a dictionary comprehension
# which builds the full dictionary in a single line.
sql_dict = { k : [ d[k] for d in init_dict ] for k in sql_cols }
산출물:
{ 'col1': ['apple','banana'], 'col2':['red','yellow'] }
PYTHON >= 3.6을 사용합니다. 여기서는 다음과 같이 작동합니다.
OBS.: 여기서는 Oracle 12g 및 MYSQL 5.6 두 데이터베이스 유형을 사용하고 있습니다. 메인 서버는 Oracle이며 mysql은 소프트웨어의 일부에서만 사용됩니다.그렇다면...연결 클래스의 코드:
여기 셸스크립트 코드에서 온 것입니다...그럼 여기에 보여줄 끈을 가져오겠습니다.
myp3 = 'XXXXXXXXXXXXXXXXXXXX 비밀번호 MYSQL XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
import cx_Oracle
import MySQLdb
import MySQLdb.cursors
class oracle(object):
def __init__(self, serverORACLE=3, MYSQL='N', serverMYSQL=3):
## ORACLE connection!
try:
if serverORACLE == 1:
self.db = cx_Oracle.connect('sys/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521/DATABASE_X')
print('ORACLE [ system/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521 ] ===> CONNECTED')
if serverORACLE == 2:
self.db = cx_Oracle.connect('system/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521/DATABASE_X')
print('ORACLE [ system/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521 ] ===> CONNECTED')
if serverORACLE == 3:
self.db = cx_Oracle.connect('userLEVEL1/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521/DATABASE_X')
print('ORACLE [ userLEVEL1/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521 ] ===> CONNECTED')
if serverORACLE == 4:
self.db = cx_Oracle.connect('userLEVEL2/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521/DATABASE_X')
print('ORACLE [ userLEVEL2/[xxxxPASSWORDxxxxx]@[xxxxxIP/HOSTxxxxxx]:1521 ] ===> CONNECTED')
self.cursor = self.db.cursor()
except Exception as e:
count = 0
S1 = ''
for W in str(e):
S1+=W
count+=1
if count >= 40:
S1+=' \n'
count = 0
print('\n\n ORACLE DATABASE ===> CONECTION FAILED!',
'\n error - module: ', S1)
##conexao MYSQL
if MYSQL=='S':
try:
if serverMYSQL == 1:
self.dbMySQL = MySQLdb.connect(user='root', host='XXXXXX HOST XXXXX', use_unicode=True, cursorclass=MySQLdb.cursors.DictCursor,
charset='utf8', port=3306, passwd=myp3, db='XXXX')
print('MySQL [ root / XXXXXX HOST XXXXX:3306 ] ===> CONNECTED')
if serverMYSQL == 2:
self.dbMySQL = MySQLdb.connect(user='XXXX USER XXXXX', host='XXXXXX HOST XXXXX', use_unicode=True, cursorclass=MySQLdb.cursors.DictCursor,
charset='utf8', port=3306, passwd=myp3, db='XXXX')
print('MySQL [ XXXX USER XXXXX / XXXXXX HOST XXXXX:3306 ] ===> CONNECTED')
self.cursorMYSQL = self.dbMySQL.cursor()
except Exception as e:
count = 0
S1 = ''
for W in str(e):
S1+=W
count+=1
if count >= 40:
S1+=' \n'
count = 0
print('\n\n MYSQL DATABASE ===> CONECTION FAILED!',
'\n error - module: ', S1)
"""
언급URL : https://stackoverflow.com/questions/2180226/python-use-mysqldb-to-import-a-mysql-table-as-a-dictionary
'programing' 카테고리의 다른 글
가져오기-Module Web Administration이 스크립트에서 로드되지 않고 명령줄에서 로드됨 (0) | 2023.09.03 |
---|---|
레일 위의 루비에서 데이터베이스 트랜잭션 내에 이미 있는지 확인하는 방법은 무엇입니까? (0) | 2023.08.29 |
res.sendFile 절대 경로 (0) | 2023.08.29 |
node.js, 오류: 'express' 모듈을 찾을 수 없습니다. (0) | 2023.08.29 |
CSS를 사용하여 요소 앞에 줄 바꿈을 삽입하는 방법 (0) | 2023.08.29 |